這題的大意就是 給出乙個數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...