2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)
发布日期:2021-05-04 18:29:23 浏览次数:27 分类:精选文章

本文共 842 字,大约阅读时间需要 2 分钟。

 

 题意:求 ∑ d|n φ(d) × n d

方法一:

由 \varphi (n) = n\prod_{p|n}(1 - \frac{1}{p})  可得 n\sum_{d|n}\varphi (d)\times \frac{n}{d} = n\times \sum_{d|n}\prod_{p|d}(1 - \frac{1}{p}) ,枚举m个素数的组合,预处理 q[i] * (1 - \frac{1}{p[i]}),复杂度 2^{20}

跑的挺快的,不算卡过吧?

方法二:

推公式,咕咕咕

#include
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); }}

 

上一篇:牛客练习赛72 C brz的序列(思维 + 凸壳)
下一篇:2020ICPC·小米 网络选拔赛第二场 I Subsequence Pair(dp)

发表评论

最新留言

很好
[***.229.124.182]2025年04月02日 16时27分35秒