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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NYOJ 928 小M的因子和(数论)

發布時間:2025/3/16 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 928 小M的因子和(数论) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小M的因子和

時間限制:1000?ms ?|? 內存限制:65535?KB 難度:2 描述

小M在上課時有些得意忘形,老師想出道題目難住他。小M聽說是求因子和,還是非常得意,但是看完題目是求A的B次方的因子和,有些手足無措了,你能解決這個問題嗎?

輸入
有多組測試樣例
每行兩個數 A ,B ,(1≤A,B≤10^9)?
輸出
輸出A的B次方的因子和,并對9901取余。
樣例輸入
2 3
樣例輸出
15


分析:對A進行質因數分解,假設A = (p1^a1) * (p2^a2)*……*(pk^ak),假設A的因子和為sum,

則sum=(1 + p1 + p1^2 + ……+p1^a1)*(1+p2+p2^2 + ……+p2^a2)*……*(1+pk+pk^2+……+pk^ak),把這個式子展開之后.每一項剛好是A的因子。

所以求A^B的因子和時,只需把ai 改為ai*b,然后再求解即可。求得時候因為次方比較大,要用分治和快速冪來求。

#include <cstdio> #include <cmath> const int mod = 9901;int Pow(int a, int n) { //快速冪求a^nint res = 1;a %= mod;while(n) {if(n&1) res = res * a % mod;a = a * a % mod;n >>= 1;}return res; }int get_sum(int a, int n) { //求(1 + a + a^2 + …… + a^n)if(n == 0) return 1;if(n&1) return get_sum(a, n / 2) * (Pow(a, (n / 2 + 1)) + 1) % mod;else return (get_sum(a, n / 2 - 1) * (Pow(a, n / 2) + 1) + Pow(a, n)) % mod; }int main() {int a, b;while(~scanf("%d%d", &a, &b)) {int ans = 1;int m = (int)sqrt(a + 0.5);for(int i = 2; i <= m; ++i) {if(a % i == 0) {int k = 0;while(a % i == 0) {k++;a /= i;}ans = ans * get_sum(i, k * b) % mod;}}if(a > 1) ans = ans * get_sum(a, b) % mod;printf("%d\n", ans);}return 0; }

總結

以上是生活随笔為你收集整理的NYOJ 928 小M的因子和(数论)的全部內容,希望文章能夠幫你解決所遇到的問題。

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