交表(Send a Table)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交表(Send a Table)相关的知识,希望对你有一定的参考价值。
1 #include<stdio.h> 2 #include<string.h> 3 #define N 50010 4 int phi[N],n,sum[N]; 5 void phi_table() 6 { 7 int i,j; 8 memset(phi,0,sizeof(phi)); 9 phi[1]=1; 10 for(i=2;i<=N;i++) 11 if(!phi[i]) 12 for(j=i;j<=N;j+=i) /*筛法求欧拉函数值*/ 13 { 14 if(!phi[j]) 15 phi[j]=j; 16 phi[j]=phi[j]/i*(i-1); 17 /*phi[j]保存不超过j且与j互质的正整数的个数*/ 18 } 19 sum[0]=0; 20 for(i=1;i<=50000;i++) 21 sum[i]=sum[i-1]+phi[i]; 22 } 23 24 int main() 25 { 26 phi_table(); 27 int i; 28 while(~scanf("%d",&n)&&n) 29 { 30 printf("%d\n",2*sum[n]-1); 31 } 32 return 0; 33 } 34 /*转化为有多少对时,2与1互质,但是(2,1)和(1,2)算2对, 35 所以应该乘以2,但是(1,1)被算了两次,所以减去一次*/
以上是关于交表(Send a Table)的主要内容,如果未能解决你的问题,请参考以下文章
D - Send a Table (UVA - 10820)