2019年ICPC银川区域赛 Easy Problem(简单莫比乌斯函数 + 欧拉降幂)
Easy Problem
∑a1=1m∑a2=1m∑a3=1m?∑an?1m∑anm[gcd(a1,a2,a3,…,an?1,an)==d](a1,a2,a3,…,an?1,an)k=dkd∑a1=1md∑a2=1md∑a3=1md?∑an?1md∑anmd[gcd(a1,a2,a3,…,an?1,an)==1](a1,a2,a3,…,an?1,an)k=dkd∑i=1mdikdμ(i)∑a1=1mid∑a2=1mid∑a3=1mid?∑an?1=1mid∑an=1mid(∏j=1nai)k這是一個多項式=dkd∑i=1mdikdμ(i)(∑j=1midiK)n\sum_{a_1 = 1} ^{m} \sum_{a_2 = 1} ^{m} \sum_{a_3 = 1} ^{m} \dots \sum_{a_{n - 1}} ^{m}\sum_{a_n} ^{m} [gcd(a_1, a_2, a_3, \dots, a_{n - 1}, a_{n}) == d](a_1, a_2, a_3, \dots,a_{n - 1}, a_n) ^k\\ = d ^{kd} \sum_{a_1 = 1} ^{\frac{m}ze8trgl8bvbq} \sum_{a_2 = 1} ^{\frac{m}ze8trgl8bvbq} \sum_{a_3 = 1} ^{\frac{m}ze8trgl8bvbq} \dots \sum_{a_{n - 1}} ^{\frac{m}ze8trgl8bvbq}\sum_{a_n} ^{\frac{m}ze8trgl8bvbq} [gcd(a_1, a_2, a_3, \dots, a_{n - 1}, a_{n}) == 1](a_1, a_2, a_3, \dots,a_{n - 1}, a_n) ^k\\ =d ^{kd} \sum_{i = 1} ^{\frac{m}ze8trgl8bvbq}i ^{kd} \mu(i) \sum_{a_1 = 1} ^{\frac{m}{id}}\sum_{a_2 = 1} ^{\frac{m}{id}}\sum_{a_3 = 1} ^{\frac{m}{id}}\dots\sum_{a_{n - 1} = 1} ^{\frac{m}{id}}\sum_{a_{n} = 1} ^{\frac{m}{id}} (\prod_{j = 1} ^{n} a_i) ^k\\ 這是一個多項式\\ = d ^{kd} \sum_{i = 1} ^{\frac{m}ze8trgl8bvbq}i ^{kd} \mu(i) (\sum_{j = 1} ^{\frac{m}{id}}i ^K) ^n a1?=1∑m?a2?=1∑m?a3?=1∑m??an?1?∑m?an?∑m?[gcd(a1?,a2?,a3?,…,an?1?,an?)==d](a1?,a2?,a3?,…,an?1?,an?)k=dkda1?=1∑dm??a2?=1∑dm??a3?=1∑dm???an?1?∑dm??an?∑dm??[gcd(a1?,a2?,a3?,…,an?1?,an?)==1](a1?,a2?,a3?,…,an?1?,an?)k=dkdi=1∑dm??ikdμ(i)a1?=1∑idm??a2?=1∑idm??a3?=1∑idm???an?1?=1∑idm??an?=1∑idm??(j=1∏n?ai?)k這是一個多項式=dkdi=1∑dm??ikdμ(i)(j=1∑idm??iK)n
到這里這道題目就化簡完成了,只需要通過簡單的數列求和加歐拉降冪即可得到答案。
/*Author : lifehappy */ #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f; const double eps = 1e-6;const int N = 1e5 + 10, mod = 59964251, phi = 59870352;int mu[N], prime[N], cnt;ll m, d, k, n, sum[N];bool st[N];char str[N];ll quick_pow(ll a, int n, int mod = 59964251) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;a = a * a % mod;n >>= 1;}return ans; }void init() {memset(st, 0, sizeof st);cnt = 0;mu[1] = 1, sum[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {mu[i] = -1;prime[cnt++] = i;sum[i] = quick_pow(i, k);}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;sum[i * prime[j]] = sum[i] * sum[prime[j]] % mod;if(i % prime[j] == 0) break;mu[i * prime[j]] = -mu[i];}} for(int i = 1; i < N; i++) {sum[i] = (sum[i] + sum[i - 1]) % mod;} }ll solve(ll m) {ll ans = 0;for(ll i = 1; i <= m; i++) {ans = ans + 1ll * mu[i] * quick_pow(i, k * n % phi + phi) % mod * quick_pow(sum[m / i], n + phi) % mod;}return (ans % mod + mod) % mod; }int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T;scanf("%d", &T);while(T--) {scanf("%s %lld %lld %lld\n", str + 1, &m, &d, &k);init();int len = strlen(str + 1);n = 0;for(int i = 1; i <= len; i++) {n = n * 10 + str[i] - '0';n %= phi;}ll ans = quick_pow(d, k * n % phi + phi) * solve(m / d) % mod;printf("%lld\n", ans);}return 0; }總結
以上是生活随笔為你收集整理的2019年ICPC银川区域赛 Easy Problem(简单莫比乌斯函数 + 欧拉降幂)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自适应辛普森(算法简要 + 模板)
- 下一篇: 减肥能吃红薯不