唯一分解定理 例題1 最大公約數和最小公倍數問題

2022-09-11 01:39:21 字數 1566 閱讀 6834

目錄

唯一分解定理

[noip2001]最大公約數和最小公倍數問題

題目描述

分析+**

首先我們來了解一下什麼是唯一分解定理。

任何乙個正整數,都可以表示(分解)為所有素數(素數又叫質數,是因數只有兩個的數)各種冪的積(1 = 任何素數 ^ 0,任何素數 = 自己 ^ 1),並且每個不同的數都只有一種分解,所以叫唯一分解定理。by the way,若乙個數依次不被比自己小的素數整除,就可以判斷它是素數。兩個數的最大公約數就是這兩個數的唯一分解式中重合的因子的積。一對互質數的分解中是沒有重複的。

如 36 = 2 ^ 2 * 3 ^ 2 ( 2 * 2 * 3 * 3 ),   10 = 2 * 5。

輸入兩個正整數x0,y0(1≤x0<100000,1≤y0≤1000000),求出滿足下列條件的p,q的個數 (1) p, q是正整數 (2) 要求p,q以x0為最大公約數, 以y0為最小公倍數. 試求:滿足條件的所有可能的兩個正整數的個數.

x0,y0

滿足條件的p,q的個數

3  60

4
這道題就要用到數論知識了,因為p,q 都可以被x0整除,所以p,q 可以表示為 a*x0 和 b*x0(a,b 為互質的正整數),我們都知道最小公倍數等於兩個數的積 / 最大公約數,所以可以得到如下等式:

a*x0 * b*x0 / x0 = y0

∴ a*x0 * b = y0

∴ a * b = y0 / x0

因為上式中全是整數,所以a和b都是 y0 / x0 的互質的因數。可以通過對 y0 / x0 唯一分解來解。

y0 / x0 = p1^w1  *  p2^w2  *  … *  pn^wn .(pi是素數,wi是冪)

就是要從這其中分出兩個集合,乙個積為a,乙個積為b。

因為a和b互質,所以從中分出的兩個集合中不能有重複的素數。題目最後要我們求的是有多少對p,q,就是看有多少種分集合的方法。因此,wi的數量已經不重要了,答案取決於wi >= 1的 pi 的數量。每乙個pi都有兩種分法,要麼去a,要麼去b。有兩個數就有2 * 2 = 4種分法。n個素數就有2 ^ n種分法。所以,整個**就是求 y0 / x0 唯一分解式中有效素數的數量n,再輸出 2 ^ n。

方法精妙,自己理解:

#include#include#includeusing namespace std;

int read()

while(s >= '0' && s <= '9')

return x * f;

}int n,m,i,j,k,s,o,num;

templatet_ qkpow(t_ a,int e)

int main()

m /= n;

for(i = 2;i <= n;i ++)

}if(m > 1) num ++;

printf("%d",int(pow(2,num)));

return 0;

}

這道題一看**很簡單,數論題基本都有這樣的特點,只是需要推理。

唯一分解定理

任意乙個大於1的正整數都能表示成若干個質數的乘積,且表示的方法是唯一的。換句話說,乙個數能被唯一地分解成質因數的乘積。因此這個定理又叫做唯一分解定理。c include include include using namespace std int main int num 32 int local...

唯一分解定理

唯一分解定律 又稱為正整數的唯一分解定理,即 每個大於1的自然數均可寫為質數的積,而且這些素因子按大小排列之後,寫法僅有一種方式。當題目有大數相除,求餘數時,精度要求高時.就要運用唯一分解定律 以下唯一分解定律證明 為了真正地證明,分解質因數的方法是唯一的,我們將再次用到反證法。假設存在某些數,它們...

唯一分解定理

problem description 假設x是乙個正整數,它的值不超過65535 即1 x 65535 請編寫乙個程式,將x分解為若干個素數的乘積。input 輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包含乙個正整數x。output 每個測試例...