題目大意:找出小於等於n且與n互質的數
方法一:
尤拉函式:講解
時間複雜度:o(sqrt(n))
模板:
int eular(int n)
}if(n>1)ret=ret-ret/n;
return ret;
}
方法二:
篩選法求出n所有的約數i
對j=i;j<=n;j+=i的所有j都和n有相同的約數i
減去這些數的個數
#include #include #include const int maxn=32768+5;
bool a[maxn];
int main()
{ //freopen("in.txt","r",stdin);
int t,n;
scanf("%d",&t);
while(t--){
memset(a,0,sizeof(a));
scanf("%d",&n);
int m=n/2;//注意這裡和素數篩選法的區別,最小的質因子是2,最大的質因子是n/2
for(int i=2;i<=m;i++){
if(n%i==0&&!a[i]){
for(int j=i;j
HDU 1286 尤拉函式
對於正整數n,尤拉函式是小於或等於n中與n互質的數的數量。x 來表示,如 8 4,那麼尤拉函式的計算公式為 x n 1 1 p1 1 1 p2 1 1 p3 1 1 pn 其中n為待求的正整數n,pi為p的質因數,注意質因數只算一次。如18 2 3 3 x 18 1 1 2 1 1 3 6 1 質數...
hdu 1286 (尤拉函式)
euler函式 那麼 12 12 1 1 2 1 1 3 4 若n是質數p的k次冪,n p k p k 1 p 1 p k 1 因為除了p的倍數外,其他數都跟n互質。尤拉函式是積性函式 若m,n互質,mn m n 特殊性質 當n為奇數時,2n n 證明於上述類似。ac include iostrea...
hdu 1286 找新朋友(尤拉函式)
一道赤裸裸的尤拉函式題!原來只知道尤拉這個人 真是頭髮短見識更短,慚愧,以後課下還是要了解一些其他方面的知識 嘿嘿 用了尤拉函式!這就是一道水題嗎 呵呵呵 附上尤拉函式的講解 在數論 對正整數 n,尤拉 函式是少於或等於n的數中與n 互質的數的數目。此函式以其首名研究者尤拉命名,它又稱為euler ...