1
#include
<iostream>
2
#include
<memory.h>
3
using
namespace std;
4
long
long ans[
1000002];
5
int pr[
1000002];
6
int prime[
79000];
7
void getprime()
8 {
9 memset(pr,
0,
sizeof(pr));
10
int k=
0;
11
for(
int i=
2;i<=
1000000;i++)
12
for(
int j=
2;j*i<=
1000000;j++)
13 {
14 pr[i*j]=
1;
15 }
16 prime[
0]=
1;
17
for(
int i=
2;i<=
1000000;i++)
18
if(pr[i]==
0)
19 prime[prime[
0]++]=i;
20 }
21
int eular(
int n)
22 {
23
int ret=
1;
24
for(
int i=
1;i<=prime[
0]&&prime[i]*prime[i]<=n;i++)
25 {
26
if(n%prime[i]==
0)
27 {
28 n/=prime[i];
29 ret*=prime[i]-
1;
30
while(n%prime[i]==
0)
31 {
32 ret*=prime[i];
33 n/=prime[i];
34 }
35 }
36 }
37
if(n>
1)
38 ret*=n-
1;
39
return ret;
40 }
41
int main()
42 {
43 getprime();
44
int n;
45 ans[
1]=ans[
2]=
1;
46
for(
int i=
3;i<=
1000000;i++)
47 {
48 ans[i]=ans[i-
1]+eular(i);
49 }
50
while(cin>>n&&n!=
0)
51 cout<<ans[n]<<endl;
52 }
转载于:https://www.cnblogs.com/congzc/archive/2011/07/01/2329942.html