2019 Multi-University Training Contest 2 1005(盲推规律

it2022-05-09  21

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=6595

题目描述:

题解:

盲推规律,贼强:

现今知道有三种:

1:通过不断缩小范围n pow(n,mod-i)来的

#include<cstdio> #define ll long long #define mod 998244353 ll pow_mod(ll a,ll b,ll c) { a = a % c; ll ans = 1; while (b) { if (b & 1) ans = ans * a % c; a = a * a % c; b >>= 1; } return ans; } int main() { ll n; while (~scanf("%lld\n", &n)) { printf("%lld\n", ((n * n - 1) * pow_mod(3, mod - 3, mod) % mod)); } return 0; }

2:通过做差来的

i23456…a[i]332748118554580197665496237665496238554580200…d[i] = a[i]-a[i-1]2218320791109160401-110916038…dd[i] = d[i]-d[i-1]110916039110916039110916039…

所以得到差的差是定值即可推出:

#include<cstdio> #define ll long long #define mod 998244353 ll a[5000]; int main() { a[0] = 0; ll p = 110916039; ll pr = 332748118; for (int i = 1; i < 3002; i++) { a[i] = ((a[i - 1] + pr) % mod + mod) % mod; pr = (pr - p) % mod; } int n; while (~scanf("%d", &n)) { printf("%lld\n", a[n - 1]); } return 0; }

3.群友忙猜,,,不懂: n 2 − 1 9 \frac{n^2-1}{9} 9n21%mod,然后除法取余用逆元 mod为质数可用费马小定理 n 2 − 1 9 \frac{n^2-1}{9} 9n21%mod等价于 ( n 2 − 1 ) ∗ 9 m o d − 2 (n^2-1)*9^{mod-2} (n21)9mod2%mod 乘法取余可化为:( ( n 2 − 1 ) (n^2-1) (n21)%mod× 9 m o d − 2 9^{mod-2} 9mod2%mod)%mod

#include<cstdio> #define ll long long #define mod 998244353 ll pow_mod(ll a,ll b,ll c) { a = a % c; ll ans = 1; while (b) { if (b & 1) ans = ans * a % c; a = a * a % c; b >>= 1; } return ans; } int main() { ll n; while (~scanf("%lld\n", &n)) { printf("%lld\n", (((n * n - 1) % mod * pow_mod(9, mod - 2, mod)) % mod)); } return 0; }

最新回复(0)