Send a Table UVA - 10820

题意:求1~n中有几对互质的数。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------摘自百度百科

 1 #include<cmath>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 
 8 const int maxn=50010;
 9 
10 int n;
11 int p[maxn],sum[maxn];
12 
13 void p_table(){
14     p[1]=0;
15     for(int i=2;i<=maxn;i++) if(!p[i])           //说明i是素数
16     {    for(int j=i;j<=maxn;j+=i){              //刷表,最好用笔模拟一下
17             if(!p[j]) p[j]=j;      
18             p[j]=p[j]/i*(i-1);                   //不能写成 p[j]=p[j]*(i-1)/i,因为可能会超int!!!
19         }
20     }
21     sum[1]=p[1];
22     for(int i=2;i<=maxn;i++) sum[i]=sum[i-1]+p[i];
23 }
24 
25 int main()
26 {   p_table();
27     while(~scanf("%d",&n)&&n) printf("%d\n",2*sum[n]+1);
28     return 0;
29 }

 

posted @ 2017-08-14 19:24  天之道,利而不害  阅读(238)  评论(0编辑  收藏  举报