hdu 4473 Exam 数学

思路:

将条件转化为满足abc<=n的abc的数目。

1.3个数相等时,为 A;

2.有2个数相等时,为 B;

3.都不相等时,为 C。

则结果为A+3*B+6*C。

代码如下:

 

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<iomanip>
 5 #include<cmath>
 6 #include<cstring>
 7 #include<vector>
 8 #define ll __int64
 9 using namespace std;
10 int main(){
11     ll n,m,ans,i,j,k,v;
12     int c=0;
13     while(scanf("%I64d",&n)!=EOF){
14         m=(ll)pow(n,1.0/3);//i=j=k
15         ans=m;
16         if((m+1)*(m+1)*(m+1)==n) ans++;
17         for(i=1;i<=m;i++){
18             v=(ll)sqrt(n/i);
19             ans+=(n/(i*i)-i+v-i)*3;//i=j , j=k
20             for(j=i+1;j<=v;j++){
21                 ans+=(n/(i*j)-j)*6;//i!=j!=k
22             }
23         }
24         printf("Case %d: %I64d\n",++c,ans);
25     }
26     return 0;
27 }
View Code

 

 

 

posted @ 2013-08-27 16:23  _随心所欲_  阅读(210)  评论(0编辑  收藏  举报