HDU 4497 質數分解和計數)

2021-07-16 02:15:05 字數 807 閱讀 3983

如果l%g != 0,說明一定無解。

把k = l / g質數分解,l / g = p1^t1 * p2^t2 * p3^t3 * ……;同時 x/= g, y/= g, z/=g,不影響結果。

假設三個數字的質數分解是:

x = p1^i1 * p2^i2 * p3^i3 * ……

y = p1^j1 * p2^j2 * p3^j3 * ……

z = p1^k1 * p2^k2 * p3^k3 * ……

要保證x, y, z互質,並且lcm(x, y, z) = k, 那麼對於p1來說,i1, j1, k1裡面一定有乙個是0,並且一定有乙個是t1,一定有乙個小於等於t1, 所以有3種情況:

0 0 t1          有3種

t1 t1 0         有3種

t1 0 1~t1-1  有(t1-1)*6種

一共是6*t1種。

同理對於p1、p2、p3.............

根據乘法原理,總的種數是:6*t1 + 6*t2 + ……

不用打質數表,直接從2開始列舉就行。

#includetypedef long long ll;

int main()

ll k = l / g;

ll ans = 1, cnt;

ll p1 = 2;

while(1)

while(k % p1 == 0)

ans *= 6 * cnt;

p1++;

}printf("%lld\n", ans);

}}

判斷質數 分解質因數

質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數,質數也叫素數。與質數相對的是合數,合數是指在大於1的整數中除了能被1和本身整除外,還能被其他數整除的數。bool is prime int n 迴圈中不建議寫成i sqrt n 因為sqrt函式很慢,每次for迴圈都會執行一遍,耗...

Pollard Rho大質數分解學習筆記

目錄給定n,要求對n質因數分解 普通的試除法已經不能應用於大整數了,我們需要更快的演算法 大概就是找出 n c d 如果 c 是素數,結束,不是繼續遞迴處理。具體一點的話 1.先對n進行 miller rabin 測試,是素數就直接結束了 如果不會的話,看我前篇部落格的介紹吧 為何還要多寫個 mil...

hdu 4497 最大公約數和最小公倍數

今天做2013acm icpc 吉林通化的題,結果是很差,以前每次做完鋼牛都會說他自己越來越弱了,而我只是想說,我似乎一直 都是這麼弱,比賽的時候看到了這題求最大公約數和最小公倍數,分析了一半然後覺得可麻煩,其實還是自己的思路不成熟,然後就在那裡動想一下西想一下,每次都是思路走了一半之後自己就停車了...