複習之求乙個數的約束之積模乙個質數

2022-03-21 02:57:31 字數 741 閱讀 3957

首先我們知道對於乙個數x, 他的約數之積可以表示為f(x) = x^(d(x)/2)  其中d(x)為x的約束的個數。 當x很大的時候d(x)會變的非常大,很難將確切的d(x)算出來, 費馬小定理告訴我們當p是質數的時候a^p = a(mod p), 當a與p互質的時候式子就變成了a^p-1 = 1 (mod p), 通過這個我們可以對d(x)取模從而簡化計算。現在我們考慮兩個數a與b互質,

d(ab) = d(a)*d(b), f(ab) = f(a)^d(b) * f(b)^d(a), f(pi^ai) = pi^(ai*(ai+1))/2, 有了這個公式, 我們將x化為唯一分解式之後很快就能解決。**如下:

#include #include 

#include

#include

using

namespace

std;

typedef

long

long

ll;const ll mod = 1000000007

;int pi[100], ai[100

];int

len;

ll powmod(ll a, ll b)

return

res;

}int

main()

ll fa=1, da=1

;

for(int i=0; i)

cout

return0;

}

求解乙個數的所有約數之積

首先我們將這個數化成唯一分解的形式,也就是這樣x p1 a1 p2 a2 pn an,我們定義答案為f x 首先我們定義d x 為x的約數的個數,那麼f x x d x 2 由費馬小定理m為素數a m 1 1 mod m a x a x m 1 mod m 其中m為素數,這樣我們就可以在計算中給冪函...

求乙個數約數的個數

求約數的個數 計算乙個整數的約數個數 輸入格式 輸入乙個整數 輸出格式 輸出一行,為輸入整數的約數的個數 樣例輸入 10 樣例輸出 4ac import math number int raw input count 0 sqrt float math.sqrt number if number s...

求乙個數中1的個數

碰到遇到乙個有趣的題,求乙個數二進位制的表示中1的個數,該題有兩種解法,一種是使用短除法將該數直接轉化為二進位制數,另一種比較巧妙的演算法是使用與運算,原理如下圖所示 依照此種思入有如下演算法 int numberof1 solution3 int i return count 依照短處法的思路 有...