typedef long long ll;
const int MOD = 1e9+7;
#define mod(x) (ll(x)%MOD)
ll pow_m(ll a , ll n) {
ll ret = 1;
ll tmp = mod(a);
while(n) {
if(n&1)
ret = mod(ret*tmp);
tmp = mod(tmp*tmp);
n >>= 1;
}
return ret;
}
//计算1 + p + p^2 +...+p^n;
ll sum(ll p , ll n) {
if(p == 0)
return 0;
if(n == 0)
return 1;
if(n & 1)
return mod(mod(1 + pow_m(p , n/2+1 )) * mod(sum(p , n/2)));
else
return mod(mod(1+pow_m(p , n/2+1)) * mod(sum(p , n/2)) + mod(pow_m(p , n/2)));
}
//返回A^B的约数之和%MOD;
ll solve(ll A , ll B) {
getFactors(A);
ll ans = 1;
for(int i = 0; i < fatCnt; i++) {
ans *= mod(sum(factor[1][0] , B*factor[i][1]));
ans = mod(ans);
}
return ans;
}
莫比乌斯反演
最新推荐文章于 2024-08-17 21:41:21 发布