bool is_prime(int x){if(x <2)returnfalse;for(int i =2; i <= x / i; i ++)if(x % i ==0)returnfalse;returntrue;}
试除法分解质因数
voiddivide(int x){for(int i =2; i <= x / i; i ++)if(x % i ==0){
int s =0;while(x % i ==0) x /= i, s ++;
cout << i <<' '<< s << endl;}if(x >1) cout << x <<' '<<1<< endl;
特判一下for循环结束后,如何x大于1则x肯定为质数
cout << endl;}
线性筛求素数
int primes[N], cnt;// primes[]存储所有素数
bool st[N];// st[x]存储x是否被筛掉voidget_primes(int n){for(int i =2; i <= n; i ++){if(!st[i]) primes[cnt ++]= i;for(int j =0; primes[j]<= n / i; j ++){
st[primes[j]* i]=true;if(i % primes[j]==0)break;}}}
约数
试除法求约数
vector<int>get_divisors(int x){
vector<int> res;for(int i =1; i <= x / i; i ++)if(x % i ==0){
res.push_back(i);if(i != x / i) res.push_back(x / i);}sort(res.begin(), res.end());return res;}
欧几里得算法求最大公约数
int gcd(int a, int b){return b ?gcd(b, a % b): a;}
素数试除法求素数bool is_prime(int x){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true;}试除法分解质因数void divide(int x){ for (int i = 2; i <= x / i; i ++ )