//求具体质数
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; } }
求一个数的所有质因子:
int i, cnt1 = 0, cnt2 = 0; for(i = 0; i < cnt && prime[i] * prime[i] <= n; i++) { cnt2 = 0; while(n % prime[i] == 0) { n /= prime[i]; cnt2++; } if(cnt2) { di[cnt1++] = prime[i]; mi[prime[i]] = cnt2; } } if(n > 1) di[cnt1++] = n, mi[n] = 1;