2 3
3 7
类似HDU2841
此题拿容斥原理来做 注意是dfs方式处理的容斥 学习一下;
#include<bits/stdc++.h>
using namespace std;
int que[100010][20];
int jishu[100010];
void Init(){
memset(jishu,0,sizeof(jishu));
for(int i=2;i<=100000;i++)
{
if(jishu[i])
continue;
que[i][0]=i;
jishu[i]=1;
for(int j=2;j*i<=100000;j++)
que[i*j][jishu[i*j]++]=i;
}
}
__int64 dfs(int m,int n,int idx){
__int64 ret=0;
for(int i=idx;i<jishu[m];i++)
ret+=n/que[m][i]-dfs(m,n/que[m][i],i+1);
return ret;
}
int main()
{
Init();
int n;
while(scanf("%d",&n)!=EOF)
{
__int64 re=n;
for(int i=2;i<=n;i++)
re+=n-dfs(i,n,0);
printf("%I64d\n",re);
}
return 0;
}
原文:http://www.cnblogs.com/hsd-/p/5008912.html