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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

因式分解,算术基本定理,积性函数(POJ 1452 Happy2004)

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 因式分解,算术基本定理,积性函数(POJ 1452 Happy2004) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • ?積性函數:是指對于所有互質的整數a和b有性質f(ab) = f(a) * f(b)
  • ?算術基本定理:任何一個大于1的正整數都能唯一分解為有限個質數的乘積,即N = p1^x1 * p2^x2 * p3^x3 * .... * pn^xn

POJ 1452:

題意:求2004^x的所有因子和,

? ? ? ? ?? 輸入x

? ? ? ? ?? 輸出:結果

題解:

/*****************解法*****************/ /** 設S(x)表示x的因數和* 積性函數:是指對于所有互質的整數a和b有性質f(ab) = f(a) * f(b)* 算術基本定理:任何一個大于1的正整數都能唯一分解為有限個質數的乘積,即N = p1^x1 * p2^x2 * p3^x3 * .... * pn^xn2004 = 2^2 * 3 * 1672004^x = 2^2x * 3^x * 167^x* 證明:S(N) = S(p1^x1) * S(p2^x2) * S(p3^x3) * ..... * S(pn^xn)* 首先舉個例子 N = ab,S(ab) = S(a) * S(b) 且a和b都為質數* 如果單純來看N這個數字的因子有:1, a, b, ab* 則 S(N) = 1 + a + b + ab;* S(a) = 1+a, S(b) = 1+b;* 所以 S(ab) = S(a) * S(b) 成立,則滿足積性函數* 對于其中一項,如p^x的所有因數和不就是自生p不斷組合的和嗎,而p的組合有:p, p^2, p^3, p^4, ........則:p^x的因數和 = 1 + p + p^2 + p^3 + p^4 + ..... + p^x很明顯該式為等比數列,即(p^(x+1) - 1) / (p - 1)**下面開始解法:* 設S(x)表示x的因數和,inverse(x)表示x的逆元* S(2004^x) = S(2 ^ 2x) * S(3 ^ x) * S(167 ^ x)* S(2 ^ 2x) = (2^(2x+1) - 1)* S(3 ^ x) = (3^(x+1) - 1) / 2* S(167^x) = (167^(x+1) - 1) / 166* S(2004^x) = (2^(2x+1) - 1) + (3^(x+1) - 1) / 2 + (167^(x+1) - 1) / 166 有一項不是質數不能求逆元* 因為29對S取模,所以S(167 ^ x) % 29 = S(22^x)* 則 S(2004 ^ x) = (2^(2x+1)%mod - 1) + (3^(x+1)%mod - 1) * inverse(2) + (22^(x+1)-1) * inverse(21)*/ /*****************解法*****************/#include<bits/stdc++.h>using namespace std; typedef long long LL;const int mod = 29;int quick_mod(int a, int b){LL ans = 1;a %= mod;while(b){if(b & 1){ans = ans *a % mod;b--;}b >>= 1; a = a * a % mod;}return ans; }int inverse(int a){int ans = 1;int b = mod-2;a %= mod;while(b){if(b & 1){ans = ans * a % mod;b--;}b >>= 1; a = a * a % mod;}return ans; }int main() {int n;while(scanf("%d", &n) && n){int ans = 1;ans *= quick_mod(2, 2*n+1) - 1; ans %= mod;ans *= (quick_mod(3, n+1) - 1) * inverse(2); ans %= mod;ans *= (quick_mod(22, n+1) - 1) * inverse(21); ans %= mod;ans %= mod;printf("%d\n", ans);}return 0; }

?

總結

以上是生活随笔為你收集整理的因式分解,算术基本定理,积性函数(POJ 1452 Happy2004)的全部內容,希望文章能夠幫你解決所遇到的問題。

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