POJ 3604(數論題目,推公式)

2021-06-04 03:12:45 字數 1506 閱讀 6588

這題的大意就是 給出乙個數n, 找到它所有的因子, 然後把這些(因子的因子數)的立方和求出來。

題目的時限雖然很寬,但是資料很bt。首先,公式必須找出來。

證明如下:

先將n質因數分解成形如n = a ^m * b ^ p * c ^q *........;

那麼要求的結果為函式g(x)的值;

我們以n有2個質因數為例子;

g(n) = g(a ^m  *  b ^p ) ;

設求因子個數的立方的函式為f(x);

然後找到所有的因子並計算和;

g(a ^ m  *  b  ^ p ) = f( a ^ m * b ^ p ) + f( a ^ (m - 1) * b  ^  p ) + f( a ^ (m - 2) * b  ^ p ) +...... + f (a ^ 0 * b ^ p) +  f(a ^m * b ^ (p - 1)) +   f(a ^(m - 1) * b ^ (p - 1)) ......+ f(a ^ 0 * b ^ (p - 1)) +...............+f(a ^ m * b ^ 0) + f(a ^ (m - 1) * b ^ 0) +.........f(a ^ 0 * b ^ 0);   ①式

注意 這個序列裡有 (m + 1) * ( n  + 1 )  個數, 所有的因子都表示出來了;

我們再觀察f(x)的性質, 可以發現乙個很重要的性質,如果 x, y互質,那麼f( x * y ) = f(x) * f(y);   這個稱為積性函式, 實際上自己觀察規律就能找到這個性質;

我們再根據這個性質  就可以合併①式了;

g(a ^m  *  b ^p ) = (f(a ^m) + f(a ^ ( m - 1)) + f(a ^ (m - 2 ) ) + ..... + f(a ^ 0)) * (f(b ^p) + f(b ^ ( p - 1)) + f(b ^ (p - 2 ) ) + ..... + f(b ^ 0));

對於乙個類似於x ^ y的因子數,答案是顯而易見的 y + 1;

那麼g(a ^m  *  b ^p )  = (1^3 + 2 ^ 3 + ..... + m ^ 3 + (m + 1)^ 3) * (1^3 + 2 ^ 3 + ..... + p ^ 3 + (p + 1)^ 3) ;

而立方和公式為 [(x * (x + 1)) / 2] ^ 2;

那麼g(a ^m  *  b ^p ) = [((m  + 2)* (m + 1)) / 2] ^ 2  * [((p + 2) * (p+ 1)) / 2] ^ 2;

g(n) 就求出來了。

我們可以得到乙個普遍規律了

如果乙個合數能被分解為 a ^ m * b ^ n * c ^ p *.............(a, b, c ......均為素數, m, n, p.....均為自然數) 

那麼題目要求的結果就是  [((m  + 2)* (m + 1)) / 2] ^ 2  * [((n + 2) * (n+ 1)) / 2] ^ 2 *  [((p + 2) * (p+ 1)) / 2] ^ 2 *.............

POJ 1006 數論簡單題

不用中國剩餘定理的知識,直接簡單模擬 include using namespace std const int pc 23,ep 28,ip 33 int p,e,i,d bool judge int ans int main ans return 0 上面的簡單模擬,差一點就超時了,估計在uva...

poj1845 數論好題

求a b的所有因數和。a,b 50000000 分解質因數 a a1 b1 a2 b2 an bn 則 因數和為 a1 0 a1 1 a1 b1 a2 0 a2 1 a2 b2 an 0 an 1 an bn 乘法原理 a b a1 b1 b a2 b2 b an bn b 因數和為 a1 0 a1...

POJ 1845 簡單數論

求a b的約數和模mod 對a質因子分解p1k1 p2k2.p kn a b既指數對應部分乘以b 對於每個p都有 1 p1 p2 p ki 的選擇 連乘每乙個p的等比數列之和即可 這裡用了分治法,我覺得有必要記一下,不然推錯就麻煩了 奇數部分sum p,c 1 p c 1 1 sum p,c 1 1...