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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF1097D Makoto and a Blackboard(期望)

發布時間:2025/7/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1097D Makoto and a Blackboard(期望) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

link

題目大意:給您一個數 n, 每次從n的所有約數(包含1、n)中等概率選出一個約數替換n,重復操作k次,求最后結果期望值%1e9+7。

題解:考慮暴力,我們設f(n,k)代表答案,則有f(n,k)=sum_{d|n}f(d,k-1)。f(n,0)=n。

我們發現如果把n分解質因數,最后結果就是所有質因子若干次方結果乘積(f是積性函數)。

分解質因數后,我們設g(n,k)代表p^n次方執行k次的結果,由于n是log級別的,所以可以直接dp了。

最后得到了p^0…p^n的分布,加起來乘到答案里就行了。

代碼

#include <cstdio> using namespace std;const int xkj = 1000000007;long long n, k, tmp; long long d[30]; int p[30], tot; int f[60], g[60], inv[60];int qpow(int x, int y) {int res = 1;for (x %= xkj; y > 0; y >>= 1, x = x * (long long)x % xkj)if (y & 1) res = res * (long long)x % xkj;return res; }int work(long long p, int m) {for (int i = 0; i < m; i++) f[i] = 0;f[m] = 1;for (int t = 1; t <= k; t++){for (int i = 0; i <= m; i++) g[i] = 0;for (int i = 0; i <= m; i++){f[i] = f[i] * (long long)inv[i + 1] % xkj;for (int j = 0; j <= i; j++){g[j] = (g[j] + f[i]) % xkj;}}for (int i = 0; i <= m; i++) f[i] = g[i];}int res = 0, tmp = 1; p %= xkj;for (int j = 0; j <= m; j++) res = (res + f[j] * (long long)tmp % xkj) % xkj, tmp = tmp * p % xkj;return res; }int main() {scanf("%lld%lld", &n, &k); tmp = n;for (int i = 0; i < 60; i++) inv[i] = qpow(i, xkj - 2);for (int i = 2; i * (long long)i <= n; i++){if (tmp % i == 0){d[++tot] = i, p[tot] = 1, tmp /= i;while (tmp % i == 0) tmp /= i, p[tot]++;}}if (tmp > 1) d[++tot] = tmp, p[tot] = 1;int ans = 1;for (int i = 1; i <= tot; i++) ans = ans * (long long)work(d[i], p[i]) % xkj;printf("%d\n", ans);return 0; }

?

轉載于:https://www.cnblogs.com/oier/p/10596729.html

總結

以上是生活随笔為你收集整理的CF1097D Makoto and a Blackboard(期望)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。