题意:
定义一个函数f(x),意思为x%(a*b)==0的a,b对数...如
f(1)=1*1
f(2)=1*1,1*2,2*1
f(3)=1*1,1*3,3*1
f(4)=1*1,1*2,2*1,2*2,1*4,4*1
.................
现在输入一个正整数N(N<=10^11)..问f(1)+f(2)+f(3)+f(4)+....f(N)的值...
题解:
练习赛的时候怎么也想不出来~~然后就没搞这题了..其实如果能想到一点..这题很简单.而且看现场的榜单..也只有5哥队做出来..真的就是差一个窗户纸啊!!
问题转换一下..求a*b*c<=N的(a,b,c)个数...好了..然后就水了...
Program:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<set>
#include <stack>
#include<queue>
#include<algorithm>
#include<cmath>
#define oo 1000000007
#define MAXN 100005
#define ll long long
#define pi acos(-1.0)
using namespace std;
ll n,i,j,k,ans=0;
int main()
{
int cases=0;
while (~scanf("%I64d",&n))
{
ans=0;
for (i=1;i*i*i<=n;i++) ans++;
for (i=1;i*i<=n;i++)
{
k=n/i/i;
if (k>=i) ans+=(k-1)*3; //减去3个相等的
else ans+=k*3;
}
for (i=1;i*i*i<=n;i++)
for (j=i+1;j<=n;j++)
{
k=n/i/j;
if (k>j) ans+=(k-j)*6;
else break;
}
printf("Case %d: %I64d\n",++cases,ans);
}
return 0;
}