UVA10892 最小公倍數素因子分解

2022-09-18 01:39:18 字數 1042 閱讀 8030

題意:

輸入正整數n,統計有多少a<=b滿足lcm(a,b)=n。輸出n以及滿足條件的整數對數。

思路:根據素因子分解求最小公倍數的演算法,可以的得出這樣的結論。如果對乙個數進行素因子分解,那麼思路就明顯了

1. 設n=lcm(a,b)=(p1^r1)*(p2^r2)*(p3^r3)…(pm^rm)

又設a=(p1^a1)*(p2^a2)*(p3^a3)…(pm^am),b=(p1^b1)*(p2^b2)*(p3^b3)…(pm^bm)

則由lcm的定義有ri=max

所以對於每個ri,ai和bi中至少有乙個要取ri

2. 對於ai取ri的情況,bi可以取[0,ri-1]的任意整數,這有ri種情況;bi取ri的情況同樣是ri種。最後加上ai和bi都取ri的情況,共有(2*ri+1)種情況

3. 最後,由於這麼考慮把(a,b)和(b,a)算重複了,但(n,n)的情況只算了一遍,所以最後要ans=(ans+1)/2=ans/2+1(因為ans是奇數)

4. 優化:只考慮√n範圍內的質數

1 #include 2 #include 3 #include 

4 #include 5

using

namespace

std;

6const

int maxx=100005;7

intfac[maxx];

8int

num[maxx],prime[maxx],p[maxx];

9int

cnt,k;

10void

isprime()

1122}23

}24void gao(long

long

n)25

37 fac[cnt]=p[i];

38 num[cnt++]=a;39}

40if(n>1)41

45}46int

main()

4760

return0;

61 }

view code

最小公倍數

最大公倍數最大是兩個數的乘積,兩個數互質 最大公約數是1 幾個數共有的倍數叫做這幾個數的公倍數,其中除0以外最小的乙個公倍數,叫做這幾個數的最小公倍數。記作 a,b 與最小公倍數相對應的概念是最大公約數,a,b的最大公約數記為 a,b 關於最小公倍數與最大公約數,我們有這樣的定理 a,b a,b a...

最小公倍數

問題描述 編寫一函式lcm,求解兩個正整數的最小公倍數。樣例輸入 乙個滿足題目要求的輸入樣例。例 3 5 樣例輸出 與上面樣例對應的輸出。例 15 資料規模和約定 輸入資料中每乙個數的範圍 例 兩個數都小於65536.演算法分析 一般來說,求兩個正整數a b的最小公倍數的演算法思路很簡單,主要分為以...

最小公倍數

求n個數的最小公倍數。輸入 輸入包含多個測試例項,每個測試例項的開始是乙個正整數n 2 n 10 然後是n個正整數。輸出為每組測試資料輸出它們的最小公倍數,每個測試例項的輸出佔一行。你可以假設最後的輸出是乙個32位的整數。樣例輸入 2 4 6 3 2 5 7 樣例輸出 1270 題目 zjgsuto...