尤拉函式入門合集(模板)

2022-04-30 08:24:05 字數 1761 閱讀 2385

首先我們先看一下poj2407和hdu1286,這兩個題幾乎完全一樣,是利用樸素的方法求尤拉函式,只不過poj要開long long而已

**(以poj為例)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

long long getphi(long long x)

if(x>1)res=(x-1)*res/x;

return res;

}int main()

return 0;

}我們觀察到hdu上的資料範圍比較小,所以我們可以用線性篩尤拉函式的方法做一下

**#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

int phi[400000],vis[400000],prime[400000],cnt;

int main()

for(i=1;i<=32767;i++)

phi[i]=i;

for(j=1;j<=cnt;j++)

for(i=prime[j];i<=32767;i+=prime[j])

phi[i]=phi[i]*(prime[j]-1)/prime[j];

cin>>n;

for(i=1;i<=n;i++)

return 0;

}我們再看一下poj2478,這道題經過分析就是求前n個數的尤拉函式,**與上面幾乎一樣

**#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const int n=1e6;

long long prime[n+5],phi[n+5],cnt,vis[n+5],pre[n+5];

int main()

for(i=2;i<=n;i++)phi[i]=i;

for(i=1;i<=cnt;i++)

for(j=prime[i];j<=n;j+=prime[i])

phi[j]=phi[j]*(prime[i]-1)/prime[i];

pre[1]=0;

for(i=2;i<=n;i++)pre[i]=pre[i-1]+phi[i];

scanf("%lld",&x);

while(x)

return 0;

}

尤拉函式入門

鏈結 尤拉函式就是 n 不 超過n且 與n互素 的正整數 的個數 n 不超 過n且與 n互素的 正整數的 個數,尤拉函式是乘 積 性函式,所以對於兩個任意互素的n,m都存在f n m f n f m f n m f n f m 乘性函式性質 對於任意正整數n,m都存在f n m f n f m f ...

尤拉函式入門

對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目 1 1 例如 8 4,因為1,3,5,7均和8互質。性質 若n是素數p的k次冪,n p k p k 1 p 1 p k 1 因為除了p的倍數外,其他數都跟n互質 尤拉函式是積性函式 若m,n互質,mn m n phi p p 1 p為質數 當...

尤拉函式入門

在數論,對正整數n,尤拉函式是小於或等於n的正整數中與n互質的數的數目 x x i 1n 1 1pi prod n i 1n 1 p i 1 其中p1,p2 pn為x的所有質因數 我覺得網上許多部落格的證明不太嚴謹,我嚴格證明一下 首先明白兩個性質 1 當n p kp k pk 且p是質數的情況下 ...