UVa10820 Send a Table

Posted SilverNebula

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa10820 Send a Table相关的知识,希望对你有一定的参考价值。

只有互质的数对才对答案有贡献。

假设有一个数x,和它互质的数的个数就是它的欧拉函数。

1<=x<=n,所以要求欧拉函数前缀和。

把数对前后两个数颠倒,总答案数为前缀和乘2

(1,1)不能颠倒

所以:求出欧拉函数前缀和,乘2,减1,就是答案。

 

 1 /*by SilverN*/
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const int mxn=51000;
 9 int phi[mxn];
10 int sum[mxn];
11 void Euler(){
12     int i,j;
13     phi[1]=1;
14     for(i=2;i<mxn;i++)
15         if(!phi[i]){
16             for(j=i;j<mxn;j+=i){
17                 if(!phi[j])phi[j]=j;
18                 phi[j]=phi[j]/i*(i-1);
19             }
20         }
21     for(i=1;i<mxn;i++)sum[i]=sum[i-1]+phi[i];
22     return;
23 }
24 int ans;
25 int n;
26 int main(){
27     Euler();
28     while(scanf("%d",&n) && n){
29         printf("%d\n",2*sum[n]-1);
30     }
31     return 0;
32 }

 

以上是关于UVa10820 Send a Table的主要内容,如果未能解决你的问题,请参考以下文章

UVA 10820 Send a Table

UVA10820 send a table

UVa10820 Send a Table

UVa 10820 - Send a Table

uva10820Send a Table

UVA 10820 交表