ll fastpow(ll a, ll b, ll p) {
a = a % p;
ll ans = 1,base = a;
while (b) {
if (b & 1)ans = (ans * base) % p;
base = (base * base) % p;
b >>= 1;
}
return ans;
}
分解素数
//多个分解
#define MAXX ((int) 1e5)
int f[MAXX + 10];
void init() {
memset(f, 0, sizeof(f));
for (int i = 2; i <= MAXX; i++) if (!f[i]) for (int j = i; j <= MAXX; j += i) f[j]++;
}
//单个分解
int getCnt(int m) {
set<int> mset;
int i = 2;
while (i < m)
{
if (m % i == 0)
{
mset.insert(i);
m /= i;
}
else
i++;
}
if(m > 1)mset.insert(m);
return mset.size();
}