题目描述 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
4
数据范围及提示 Data Size & Hint
这题应该放在下一题后面的~~
关于gcd和lcm的讲解将在下一题的解题报告里。
我们知道,最大公约数、最小公倍数和原来的两个数有三个已知就能推算第四个量。这一命题来自最小公倍数的计算方法:lcm(a,b)=a*b/gcd(a,b)。由此我们可以联系本题:已知x,y,求整数P、Q使得x为gcd、y为lcm。
这样,我们就可以枚举P,由于P*Q=lcm(P,Q)*gcd(P,Q),所以Q=P/(x*y)。即每次对于枚举到的P、Q,检验x,y是否为gcd和l
cm。在枚举的时候,由于P、Q为整数,所以x*y必须被P整除,否则该情况直接跳过。
算法描述:对于输入数据,枚举可能的P、Q,若P、Q符合条件,则作为一种情况输出,直到搜索结束。
Program asd;
Var
i,x,y:longint;
total,t:longint;
Function gcd(aa,bb:longint):longint;
var aaa:longint;
begin
if aa<bb then begin aaa:=aa;aa:=bb;bb:=aaa;end;
if bb=0 then exit(aa);
gcd:=gcd(bb,aa mod bb);
end;
Begin
readln(x,y);
t:=x*y;
for i:=2 to round(sqrt(t))-1 do
if (t mod i)=0 then
if x=gcd(t div i,i) then inc(total,2);
writeln(total);
End.