洛谷P1029 最大公约数和最小公倍数问题

最大公约数和最小公倍数问题

问题描述

输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数

条件:

1.P,Q是正整数

2.要求P,Q以x0为最大公约数,以y0为最小公倍数.

试求:满足条件的所有可能的两个正整数的个数.

分析

这题就是纯枚举,用辗转相除法求最大公约数,而最小公倍数只要用p*q=x0*y0判断即可。注意判断时要先判断最小公倍数否则会超时。

代码

var
  x,y,ans,i,j:longint;


function zd(a,b:longint):longint;
var
  r:longint;
begin
  r:=a mod b;
  while r<>0 do
    begin
      a:=b;
      b:=r;
      r:=a mod b;
    end;
  exit(b);
end;


begin
  readln(x,y);
  for i:=x to y do
    for j:=x to y do
      if (i*j=x*y) and (zd(i,j)=x) then begin inc(ans);break;end;
  writeln(ans);
end.

你可能感兴趣的:(枚举,2017寒假)