//求具体质数
void init() { int cnt = 0; mem(vis,0); for(int i=2; i<maxn; i++) if(!vis[i]){ primes[cnt++] = i; for(LL j=(LL)i*i; j<maxn; j+=i) vis[j] = 1; } }
求一个数的所有质因子:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; const int maxn = 10010, INF = 0xfffffff; void init(int n) { int B[maxn], primes[maxn]; int cnt = 0, cnt2 = 0; // cnt是存储质因子的下标 cnt2统计质因子的个数 for(int i=0; primes[i] * primes[i] <= n; i++) { if(n % primes[i] == 0) { B[cnt++] = primes[i]; while(n % primes[i] == 0) { n /= primes[i]; cnt2++; } }
if(n > 1) B[cnt++] = n, cnt2++; } }