首先我們先看一下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是質數的情況下 ...