題目描述
輸入兩個正整數 x0,y0x_0, y_0x0,y0,求出滿足下列條件的 P,QP, QP,Q 的個數:
P,Q是正整數。
要求 P,Q以 x0 爲最大公約數,以 y0 爲最小公倍數。
試求:滿足條件的所有可能的 P,Q的個數。
輸入格式
一行兩個正整數 x0,y0。
輸出格式
一行一個數,表示求出滿足條件的 P,Q 的個數。
輸入輸出樣例 輸入 #1
3 60
輸出 #1
4
說明/提示
P,Q 有 444 種:
3,60
15,12
12,15
60,3
思路:
(百科的圖)
最大公約數和最小公倍數的關係:
a * b = ab兩個數的最大公約數和最小公倍數之積
因此: 最小公倍數=a*b / 最大公約數
代碼:
#include <iostream>
using namespace std;
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main()
{
int x,y,p,q,ans=0;
cin>>x>>y;
for(p=x;p<=y;p++) //一層循環就夠了,根據他們的關係直接求出另一個數
{
if(x*y%p) continue; //不是整除直接跳過
q=x*y/p;
// int yue=q<p?gcd(q,p):gcd(p,q);似乎兩個數的順序沒要求今天才知道
int yue=gcd(q,p); //這樣也能過
if( yue==x && (q*p)/yue==y) //公約數=x,公倍數=y
ans++; //是一種方案
}
cout<<ans;
return 0;
}