在电脑上后面仨点过不了,要用I64d,lld会炸。但是洛谷上要用lld,LINUX系统没有I64d
1 /* 2 求一个数对满足 (a*b)|n,也就是求三个数 a*b*c=n,那么求1~n之间的,就是a*b*c<=n了 3 (a,b,c)是有序的, 4 答案= 5 1、a13 #include 14 #include 15 #include 16 #include 17 using namespace std;18 19 long long n;20 long long ans,temp;21 22 int main()23 {24 scanf("%lld",&n);25 //计算a b,所以小于c大于b的数都可以,所以小于等于b的数要舍去,即减去b。29 而且不必担心减j后减出负数,因为a<=3√n,b<=3√n,所以c>=3√n*/ 30 ans+=temp*6; //6种排列方式,ans*6 31 temp=0; 32 for(long long i=1,t;(t=i*i)<=n;++i) //计算a=b!=c的情况 33 {34 temp+=n/t;35 if(t*i<=n) --temp; //t=i*i,t*i=i*i*i,因为a=b=c的情况前边算了,所以减去 36 }37 ans+=temp*3; //三种排列方式,ans*3 38 printf("%lld",ans);39 return 0;40 }