題目描述 description
輸入二個正整數x0,y0(2<=x0<100000,2<=y0<=1000000),求出滿足下列條件的p,q的個數
條件: 1.p,q是正整數
2.要求p,q以x0為最大公約數,以y0為最小公倍數.
試求:滿足條件的所有可能的兩個正整數的個數.
輸入描述 input description
二個正整數x0,y0
輸出描述 output description
滿足條件的所有可能的兩個正整數的個數
樣例輸入 sample input
3 60
樣例輸出 sample output
資料範圍及提示 data size & hint
3 60
60 3
12 15
15 12
分析1. 我們知道:q=p*y0/x0,令y0/x0=k,則可得到乙個等式:q=k*p。則我們的目的就是找出這個等式成立共有多少種可能;
2. 為了使等式兩邊成立,只需把k分解因數,把因數分到等式兩邊即可,如對於輸入樣例可得:k=20,可分解成:2*2*5,由於要保證最大公因數不會改變,所以2*2只能當做是乙個4放在等式的一邊,而不能把兩個2分別放在等式兩邊,否則最大公因數將會變成2*3=6;
3. 所以,k=20時,只能分解成4*5,也就是20只有兩種質因數——2和5,所以2個因數要分到等式兩邊的情況共有4種,所以答案是4(如表2)。
4. 所以,此題我們只需把k(y0/x0)進行分解質因數,如果質因數共有n種,則答案就是2的n次方。
1 #include2 #include3view codeintx,y;
4bool zhi(intx)5
10int
main()
1118 x=y/x; y=0;19
for (int i=2;i<=x;++i)
20if
(zhi(i))
2125 printf("
%d/n
",(int)pow(2
,y));
26return0;
27 }
最大公約數 最小公倍數
求最大公約數最直接的辦法是從兩數中較小數與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為正整數...