分解质因数: 对于任何一个数
n
n
n ,一定能够表示成
n
n
n =
a
0
a_0
a0^
p
0
p_0
p0 *
a
1
a_1
a1^
p
1
p_1
p1 * …… *
a
k
a_k
ak^
p
k
p_k
pk ,{
a
n
a_n
an}为质数。
埃氏筛
线性筛
代码模板
//质数判断intis_prime(int n){if(n==1){return0;}for(int i =2; i <= n/ i; i ++){if(n%i ==0){return0;}return1;}//分解质因数voiddivide(int n){for(int i =2; i <= n / i ; i ++){if(n % i ==0){int s =0;while(n % i ==0){
n = n / i;
s ++;}printf("%d %d",i,s}}}if(n >1){printf("%d %d",n , i);}}
埃氏筛
constint N =***;int prime[N];bool vt[N];int cnt =0;voidget_prime(int x){for(int i =2; i <= x /i ; i ++){if(!st[i]){
prime[cnt++]= i;for(int j =2*i; j <= x ; j+=i){
vt[j]=true;}}}}
线性筛
constint N =***;int prime[N];bool vt[N];int cnt =0;voidget_prime(int x){for(int i =2; i <= x/i ; i++){if(!vt[i])prime[cnt++]= i;for(int j =0; prime[j]*i <= x; j++){
vt[prime[j]*i]=true;if(i%prime[j]==0)break;}}}