hdu 4473 exam數論第一場基礎演算法
阿新 • • 發佈:2019-01-06
hdu 4473 exam 數論
注意資料大小,要用long long int
//這道題主要就是轉換思路 //一開始完全不知道說啥呢,就是隻知道這是一道數論相關的題 //想到這就開始轉換思路,(a*b)|n=c,其實就是a*b*c=n; //分三種情況,第一種3個數相等,第二種2個數相等,第三種三個數均不等 #include<cstdio> #include<algorithm> #include<cmath> #include<iostream> using namespace std; int main() { long long int n,x=1,coun=0; while(~scanf("%lld",&n)){ coun=0; long long int k; for(long long int i=1;i*i*i<=n;i++) coun++; for(long long int i=1;i*i<=n;i++){ k=n/i/i; if(k>=i) coun+=3*(k-1);//因為k不能等於i,所以減掉一種情況 else coun+=3*k; } for(long long int i=1;i*i*i<=n;i++){ for(long long int j=i+1;j<=n;j++){ k=n/i/j; if(k>j) coun+=(k-j)*6; else break;//如果不滿足k>j的話一定是有重複的,就不是這種三個各不相同情況 } } printf("Case %lld: %lld\n",x++,coun); } return 0; }