质数判断
bool is_prime(int x){
if(x<=1)return false;
for(int i=2;i<=x/i;i++){
if(x%i==0)
return false;
}
return true;
}
分解质因数
vector<pair<int,int> > divide(int x){
vector<pair<int,int> > a;
for(int i=2;i<=x/i;i++){
if(x%i==0){
int c=0;
while(x%i==0){
c++;
x/=i;
}
a.push_back({i,c});
}
}
if(x>1)a.push_back({x,1});
return a;
}
筛素数
int prime[maxn];// primes[]存储所有素数
bool is[maxn]// st[x]存储x是否被筛掉
int find_prime(int x){
int cnt=0;
for(int i=2;i<=x;i++){
if(is[i])continue;
prime[cnt++]=i;
for(int j=i;j<=x;j+=i){
is[j]=true;
}
}
return cnt;//返回 <=n 的素数个数
}
求所有约数
vector<int> get_divisor(int x){
vector<int> a;
for(int i=1;i<=x/i;i++){
if(x%i==0){
a.push_back(i);
if(i!=x/i)a.push_back(x/i);
}
}
sort(a.begin(),a.end());
return a;
}
求最大公约数
可以直接调用
#include< algorithm >
__gcd()
注意两个下划线噢
int gcd(int x,int y){
// if(y>x)return gcd(y,x);
if(y==0)return x;
return gcd(y,x%y);
}