欧拉函数 - HDU1286
生活随笔
收集整理的這篇文章主要介紹了
欧拉函数 - HDU1286
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
歐拉函數(shù)的作用:
有[1,2.....n]這樣一個(gè)集合,f(n)=這個(gè)集合中與n互質(zhì)的元素的個(gè)數(shù)。歐拉函數(shù)描述了一些列與這個(gè)f(n)有關(guān)的一些性質(zhì),如下:
1、令p為一個(gè)素?cái)?shù),n = p ^ k,則 ? f(n) = p ^ k - p ^ (k-1)
2、令m,n互質(zhì),則 ? f(m*n) = f(m) * f(n)
3、如果n為奇數(shù),則 ? ?f(2 * n) = f(n)
?
下面給出一個(gè)例題的代碼,例題鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1286
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <string> 7 #include <cmath> 8 using namespace std; 9 const int maxn = 32769; 10 11 int ans[maxn],prim[4000],flag_p[maxn]; 12 /* 13 把1~maxn所有的素?cái)?shù)打出來(lái) 14 */ 15 int SolPrim() 16 { 17 memset(flag_p,0,sizeof(flag_p)); 18 for(int i = 2;i < sqrt((double)maxn);++i) 19 for(int j = i * i;j < maxn;j += i) 20 flag_p[j] = 1; 21 int f = 0; 22 for(int i = 2;i < maxn;++i) 23 if(!flag_p[i]) 24 prim[f++] = i; 25 } 26 /* 27 打表,把結(jié)果全部打出來(lái) 28 */ 29 void PreSol() 30 { 31 int f = SolPrim(); 32 memset(ans,0,sizeof(ans)); 33 for(int i = 1;i < 32768;++i) 34 { 35 int temp = 1,t = i; 36 for(int j = 0;prim[j] <= i;++j) 37 { 38 int tt = 0; 39 while(t % prim[j] == 0) 40 { 41 t /= prim[j]; 42 tt++; 43 } 44 if(tt) temp *= (pow(prim[j],tt-1) * (prim[j] - 1)); 45 } 46 ans[i] = temp; 47 } 48 } 49 50 int main() 51 { 52 PreSol(); 53 int T,n; 54 scanf("%d",&T); 55 while(T--) 56 { 57 scanf("%d",&n); 58 printf("%d\n",ans[n]); 59 } 60 return 0; 61 } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaxiaosheng/p/4713977.html
總結(jié)
以上是生活随笔為你收集整理的欧拉函数 - HDU1286的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 工行生肖信用卡有哪些权益?五大权益服务到
- 下一篇: Radar Installation