洛谷1029 最大公约数和最小公倍数问题
本题地址: http://www.luogu.org/problem/show?pid=1029
题目描述
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件:
1.P,A是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.
试求:满足条件的所有可能的两个正整数的个数.
输入输出格式
输入格式:
二个正整数x0,y0
输出格式:
一个数,表示求出满足条件的P,Q的个数
输入输出样例
输入样例#1:
3 60
输出样例#1:
4
说明
P,Q有4种
3 60
15 12
12 15
60 3
题解
枚举
思路很简单。只需枚举所有可能的数值,如果满足条件,则个数+1,最后输出个数。
注意:
1.最大公约数需要按照从大到小的顺序枚举,最小公倍数则是按照从小到大的顺序枚举。
2.不要去重,比如说明中的(3,60)(60,3)前后顺序不同需要计数两次。
下面附上代码。
代码
- program P1029;
- var
- x0,y0,s,ans,k:longint;
- begin
- readln(x0,y0);
- if y0 mod x0<>0 then
- begin
- writeln(0);
- halt;
- end;
- s:=y0 div x0;
- k:=2;
- ans:=1;
- while k<=s do
- begin
- if s mod k=0 then
- begin
- while s mod k=0 do s:=s div k;
- ans:=ans*2;
- end;
- inc(k);
- end;
- writeln(ans);
- end.
(本文系笔者原创,未经允许不得转载)