2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)
程序员文章站
2022-04-27 13:57:38
...
题意:求
方法一:
由 可得 ,枚举m个素数的组合,预处理 ,复杂度
跑的挺快的,不算卡过吧?
方法二:
推公式,咕咕咕
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
int p[25], q[25];
ll pp[25];
ll qpow(ll a, ll b){
ll ans = 1;
while(b > 0){
if(b & 1){
ans = ans * a % mod;
}
a = a * a % mod;
b >>= 1;
}
return ans % mod;
}
int m;
ll ans, n;
void dfs(int now, ll res) {
if(now == m + 1) {
ans = (ans + res) % mod;
return ;
}
dfs(now + 1, res);
dfs(now + 1, res * pp[now] % mod);
}
signed main()
{
int t;
scanf("%d", &t);
while(t--) {
ans = 0;
n = 1;
scanf("%d", &m);
for(int i = 1; i <= m; i++) {
scanf("%d%d", &p[i], &q[i]);
n = n * qpow(1ll * p[i], 1ll * q[i]) % mod;
}
for(int i = 1; i <= m; ++i)
pp[i] = (p[i] - 1) * qpow(1ll * p[i], mod - 2) % mod * q[i] % mod;
dfs(1, 1);
printf("%lld\n", n * ans % mod);
}
}
上一篇: Box2D for processing Create circle
下一篇: 过度工程