P1131最小公倍數和最大公約數問題

2021-06-21 03:13:11 字數 890 閱讀 5545

輸入二個正整數x0,y0(2≤x0≤100000,2≤y0≤1000000),求出滿足下列條件的p、q的個數。

條件:1.p、q是正整數

2.要求p、q以xo為最大公約數,以yo為最小公倍數。

試求,滿足條件的所有可能的兩個正整數的個數。

兩個正整數

滿足條件的所有可能的兩個正整數的個數

3   60

4

題解:來自voj題解  

jungle

就拿樣例來說

y=60=2*2*3*5

x=3=3

60/3=2*2*5;

設集合a為

如果a,b的最大公約數和最小公倍數是3和60

那麼a=3*集合b b=3*集合c

其中集合b+集合c=集合a

(這裡表達比較有問題大家不要計較= =)

如果集合b和集合c裡面都有乙個2

那麼a和b肯定存在相同的因數為3*2

就不符合a,b的最大公約數為3的條件

所以集合b和集合c中不能有相同的質因數

也就是說

a=3*2*2 b=3*5是合法的

a=3*2 b=3*2*5是不合法的

如果不同質因數的個數是n個

每種質因數可以取或不取

對於集合b來說有2^n種選擇方法

而集合c與集合b一一對應

所以總的方法數就是2^n了

ac code:

#include #include using namespace std;

int main()

else

}if(i>k)

break;

} for(i=1;i<=j;i++)

sum*=2;

cout<

最大公約數 最小公倍數

求最大公約數最直接的辦法是從兩數中較小數與2之間的所有整數中乙個乙個的找。但這個方法有點浪費。有兩種有名的方法 1.輾轉相除法2.更相減損之術這兩種方法比較有名,而且現在人教版的高中數學中已經介紹了這兩種方法。下面這個是第2個,因為它只需要加減法就可以,效率高。int maxfactor unsig...

最小公倍數 最大公約數

求最小公倍數演算法 最小公倍數 兩整數的乘積 最大公約數 求最大公約數演算法 1 輾轉相除法 有兩整數a和 b a b得餘數c 若c 0,則 b即為兩數的最大公約數 若c 0,則 a b,b c,再回去執行 例如求27和 15的最大公約數過程為 27 15 餘12 15 12餘3 12 3餘0 因此...

最大公約數,最小公倍數

兩個數最大公約數 輾轉相除法 在數學中,輾轉相除法,又稱歐幾里得演算法,是求最大公約數的演算法。兩個整數的最大公約數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理 兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如 用 a,b 來表示a和b的最大公約數。已知a,b,c為正整數...