求尤拉函式(小於等於n的數中與n互質的數的數目)
求最大素因數
打素數表
判斷乙個數是否是素數
在一些題目中,需要先提前暴力出最大值,否則會超時。
1的尤拉函式值是1,但是看題目說明,有些題目認為小於等於,有些只有小於
1與任何數互質
不與n互質的數不一定是n的約數
最後的n>1是為了處理當n是兩個素數相乘或者是乙個素數的情況。
尤拉函式:
數論中,對於正整數n,尤拉函式是小於等於n的數中與n互質的數的數目。 原理:素數冪分解後,f(n) = n*(1-1/p1)…..(1-1/pk) (容斥原理變形) 單獨求尤拉的函式實現過程恰好相反。 最小的質數是2,1不是質數。 用一變數儲存i,最後乙個i即最大素因數。
//求尤拉函式
long
long euler_phi(long
long n)
if(n == 1) break;
}if(n>1)
ans = ans / n * (n-1);
return ans;
}//求n以內的尤拉函式值
//每乙個素數的倍數都除去這個素數的影響。
const
int maxn = 10000001;
int phi[maxn+5];
void phi_table()}}
}
求n!的尤拉函式對mod的餘數。
const
int n = 10000000;
bool primetable[n+5];
void make_primetable()
}}const
int maxn = 10000000;
const
int mod = 100000007;
long
long phi[maxn+5];
void phi_table()
}
題目中資料量大(大於sqrt(n))往往需要先打表
//生成素數表
//線性複雜度,10^8需要101ms左右
//the prime's size = n/lnn; more than 10^5 can use 10
const
int maxn = 100000000;
bool isprime[maxn+5];
vector
prime;
void cac_prime()
}}
素數判斷
bool isprime(int x)
尤拉函式 素數篩
尤拉發現求小於等於n的正整數中有多少個數與n互質可以用這個公式 euler x x 1 1 p1 1 1 p2 1 1 p3 1 1 p4 1 1 pn 其中p1,p2 pn為x的所有素因數,x是不為0的整數。euler 1 1 唯一和1互質的數就是1本身 尤拉公式的延伸 乙個數的所有質因子之和是e...
判斷素數與尤拉篩
對於乙個數,判斷是否為素數,按照性質暴力列舉每乙個,時間複雜度就是o n 今天,不討論這個,討論一下更高效的方法。這是我在一篇部落格看到的方法,時間複雜度為o sqr n 3 方法3 首先看乙個關於質數分布的規律 大於等於5的質數一定和6的倍數相鄰。例如5和7,11和13,17和19等等 證明 令x...
數論 素數 素數相關基礎 尤拉函式與尤拉定理
尤拉定理與尤拉函式在數論方面的應用十分廣泛,幾乎所有的形如a n k 1的東西都可以往上靠。這裡暫時不細說怎麼用,先講基礎內容。1 尤拉函式 尤拉函式 n 表示不超過n且與n互素的正整數的個數 計算公式為 n n 1 1 p1 1 1 p2 其中p1,p2 為n的質因數 2 尤拉定理 若a,n是正整...