码迷,mamicode.com
首页 > 其他好文 > 详细

poj 3478 poj 3090(欧拉函数的应用)

时间:2015-11-11 16:17:23      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

3478题目意思是Farey序列是由一系列不能约分的分数a/b(0<a<b<=n且gcd(a,b)=1)按照递增的顺序组成的,然后给出了Fn的前几项,让你计算Fn中有多少个分数.

很明显Fn中的数的个数就是分别与(2,3,4.....n-1,n)互质的数的个数的和。也就是求欧拉函数的前n项和。

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <stack>
 5 #include <queue>
 6 #include <map>
 7 #include <algorithm>
 8 #include <vector>
 9 
10 using namespace std;
11 
12 const int maxn = 1000000;
13 
14 typedef long long LL;
15 
16 LL phi[maxn+1];
17 
18 void init()
19 {
20     LL i,j;
21     for(i=1;i<=maxn;i++) phi[i] = i;
22     for(i=2;i<=maxn;i+=2) phi[i]/=2;
23     for(i=3;i<=maxn;i+=2){
24         if(phi[i] == i){
25             for(j=i;j<=maxn;j+=i){
26                 phi[j] = phi[j]/i*(i-1);
27             }
28         }
29     }
30     for(i=3;i<maxn+1;i++){
31         phi[i]+=phi[i-1];
32     }
33 }
34 
35 int main()
36 {
37      init();
38      int n;
39      while(cin>>n&&n){
40         printf("%lld\n",phi[n]);
41      }
42 
43     return 0;
44 }
View Code

 3090的情况跟3478差不多,但是要注意的可见点的情况是以x=y这条直线对称的,所以最后的答案是2*phi[n]+1,x=y也算。

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <stack>
 5 #include <queue>
 6 #include <map>
 7 #include <algorithm>
 8 #include <vector>
 9 
10 using namespace std;
11 
12 const int maxn = 1000;
13 
14 typedef long long LL;
15 
16 LL phi[maxn+1];
17 
18 void init()
19 {
20     LL i,j;
21     for(i=1;i<=maxn;i++) phi[i] = i;
22     for(i=2;i<=maxn;i+=2) phi[i]/=2;
23     for(i=3;i<=maxn;i+=2){
24         if(phi[i] == i){
25             for(j=i;j<=maxn;j+=i){
26                 phi[j] = phi[j]/i*(i-1);
27             }
28         }
29     }
30     for(i=2;i<maxn+1;i++){
31         phi[i]+=phi[i-1];
32     }
33 }
34 
35 int main()
36 {
37      init();
38      int n;
39      int cas;
40      cin>>cas;
41      for(int i=1;i<=cas;i++){
42         cin>>n;
43         printf("%d %d %d\n",i,n,2*phi[n]+1);
44      }
45 
46     return 0;
47 }
View Code

 

poj 3478 poj 3090(欧拉函数的应用)

标签:

原文地址:http://www.cnblogs.com/lmlyzxiao/p/4956185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!