题目输入一个n ,求phi[2]+phi[3]..............+phi[n]
其中phi[n]表示不超过n的并且与n互质的数的个数,即欧拉函数的值
这是一道模板题
代码如下:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>
#define N 1000000
#define eps 1e-9
#define pi acos(-1.0)
#define P system("pause")
#define ll long long
using namespace std;
int phi[N+10];
void phi_table() //用类似筛法的方法计算phi[i],这是模板
{
memset(phi,0,sizeof(phi));
phi[1] = 1;
for(int i = 2; i <= N; i++)
if(!phi[i])
for(int j = i; j <= N; j += i)
{
if(!phi[j])
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
phi_table();
// for(int i = 2 ;i < 100; i++)
// cout<<phi[i]<<" ";
int n;
while(scanf("%d",&n) && n)
{
ll ans = 0 ;
for(int i = 2; i <= n; i++)
ans += (ll)phi[i];
printf("%lld\n",ans);
}
// P;
return 0;
}