判断一个数是不是素数
bool isp(int x){
for(int i=2;i*i<=x;i++)
if(x%i==0) return 0;
return 1;
}
寻找一个合数的所有质因子
if(isp(j)){
int x=j;
for(int i=2;i*i<=j;i++){
int k=0;
while(x%i==0){
k++;
x/=i;
}
cnt[i]=max(cnt[i],k);
}
if(x!=1) cnt[x]=max(cnt[x],1);
}
素数筛
#include<iostream>
using namespace std;
int ss[1000001],a[100001];
int main(){
int k=0;
for(int i=2;i<=10000;i++){
if(ss[i]) continue;
for(int j=i;j*i<=10000;j++){
ss[i*j]=1;
}
a[k++]=i;
}
线性素数筛
int v[MAX],pi[MAX];
int m;
void pri(int n){
m=0;
for(int i=2;i<=n;i++){
if(v[i]==0){v[i]=i,pi[++m]=i;}
for(int j=1;j<=m;j++){
if(pi[j]>v[i]||pi[j]>n/i) break;
v[i*pi[j]]=pi[j];
}
}
}