日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演 + 伯努利数)

發(fā)布時(shí)間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演 + 伯努利数) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

P6271 [湖北省隊(duì)互測(cè)2014]一個(gè)人的數(shù)論

∑i=1nim[gcd?(i,n)=1]∑d∣nμ(d)dm∑i=1ndim由伯努利數(shù)可知∑i=0nim=1m+1∑i=0mCm+1iBi(n+1)m?i+1設(shè)fi=1m+1Bm?i+1Cm+1i,則有∑d∣nμ(d)dm(∑i=1m+1fi(nd)i+(nd)m)∑i=1m+1fini∑d∣nμ(d)dm?i+(nm∑d∣nμ(d))考慮后項(xiàng)∑d∣nμ(d)dm?i,迪利克雷卷積乘積,為積性函數(shù)F(n)=∑d∣nμ(d)dm?i,F(1)=1,F(pk)=1?pm?i\sum_{i = 1} ^{n} i ^ m [\gcd(i, n) = 1]\\ \sum_{d \mid n} \mu(d) d ^ m \sum_{i = 1} ^{\frac{n}ozvdkddzhkzd} i ^ m\\ 由伯努利數(shù)可知\sum_{i = 0} ^{n} i ^ m = \frac{1}{m + 1} \sum_{i = 0} ^{m} C_{m + 1} ^{i} B_i (n + 1) ^{m - i + 1}\\ 設(shè)f_i = \frac{1}{m + 1}B_{m - i + 1} C_{m + 1} ^{i},則有\(zhòng)\ \sum_{d \mid n} \mu(d) d ^ m \left( \sum_{i = 1} ^{m + 1} f_i (\frac{n}ozvdkddzhkzd) ^ i + (\frac{n}ozvdkddzhkzd) ^ {m} \right) \\ \sum_{i = 1} ^{m + 1} f_i n ^ i \sum_{d \mid n} \mu(d) d ^{m - i} + (n ^ m \sum_{d \mid n} \mu(d))\\ 考慮后項(xiàng)\sum_{d \mid n} \mu(d) d ^{m - i},迪利克雷卷積乘積,為積性函數(shù)\\ F(n) = \sum_{d \mid n} \mu(d) d ^{m - i}, F(1) = 1, F(p ^ k) = 1 - p ^{m - i}\\ i=1n?im[gcd(i,n)=1]dn?μ(d)dmi=1dn??im數(shù)i=0n?im=m+11?i=0m?Cm+1i?Bi?(n+1)m?i+1設(shè)fi?=m+11?Bm?i+1?Cm+1i?,dn?μ(d)dm(i=1m+1?fi?(dn?)i+(dn?)m)i=1m+1?fi?nidn?μ(d)dm?i+(nmdn?μ(d))項(xiàng)dn?μ(d)dm?i數(shù)F(n)=dn?μ(d)dm?i,F(1)=1,F(pk)=1?pm?i

由于mmm較小,且模數(shù)是109+710 ^ 9 + 7109+7,所以可以考慮O(m2)O(m ^2)O(m2)遞推得到伯努利數(shù),之后可以枚舉iii,然后每次O(w)O(w)O(w)做一次線性篩,整體復(fù)雜度O(mw)O(m w)O(mw)

#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10, mod = 1e9 + 7;int C[N][N], B[N], inv[N], f[N], p[N], n, m;void init() {for (int i = 0; i < N; i++) {C[i][0] = C[i][i] = 1;for (int j = 1; j < i; j++) {C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;}}inv[1] = 1;for (int i = 2; i < N; i++) {inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;}B[0] = 1;for (int i = 1; i < N; i++) {int cur = 0;for (int j = 0; j < i; j++) {cur = (cur + 1ll * C[i + 1][j] * B[j] % mod) % mod;}cur = 1ll * cur * inv[i + 1] % mod;B[i] = (mod - cur) % mod;} }int quick_pow(int a, int n) {int ans = 1;while (n) {if (n & 1) {ans = 1ll * ans * a % mod;}a = 1ll * a * a % mod;n >>= 1;}return ans; }int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);init();scanf("%d %d", &m, &n);for (int i = 1; i <= m + 1; i++) {f[i] = 1ll * inv[m + 1] * B[m - i + 1] % mod * C[m + 1][i] % mod;}int base = 1;for (int i = 1, w; i <= n; i++) {scanf("%d %d", &p[i], &w);base = 1ll * base * quick_pow(p[i], w) % mod;}int ans = 0, now = 1;for (int i = 1; i <= m + 1; i++) {now = 1ll * now * base % mod;int cur = 1ll * f[i] * now % mod, res = 1, po = m - i;if (po < 0) {po += mod - 1;}for (int j = 1; j <= n; j++) {res = 1ll * res * (1 - quick_pow(p[j], po) + mod) % mod;}cur = 1ll * cur * res % mod;ans = (ans + cur) % mod;}printf("%d\n", ans);return 0; }

總結(jié)

以上是生活随笔為你收集整理的P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演 + 伯努利数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。