hdu 4473 Exam 数学

时间:2022-04-29 16:52:27

思路:

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

1.3个数相等时,为 A;

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

3.都不相等时,为 C。

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

代码如下:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
using namespace std;
int main(){
ll n,m,ans,i,j,k,v;
int c=;
while(scanf("%I64d",&n)!=EOF){
m=(ll)pow(n,1.0/);//i=j=k
ans=m;
if((m+)*(m+)*(m+)==n) ans++;
for(i=;i<=m;i++){
v=(ll)sqrt(n/i);
ans+=(n/(i*i)-i+v-i)*;//i=j , j=k
for(j=i+;j<=v;j++){
ans+=(n/(i*j)-j)*;//i!=j!=k
}
}
printf("Case %d: %I64d\n",++c,ans);
}
return ;
}