回 帖 发 新 帖 刷新版面

主题:输入xO,yO 要求P、Q以xO为最大公约数,以yO为最小公倍数。

描述 Description   
     输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。
  条件:1.P、Q是正整数
      2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
  试求,满足条件的所有可能的两个正整数的个数。 
   
   
 输入格式 Input Format  
   两个正整数  
   
   
 输出格式 Output Format  
   满足条件的所有可能的两个正整数的个数 

回复列表 (共4个回复)

沙发

穷举吧
function gcd(a, b:longint);//求a,b的最大工约数
  begin
    if b=0 then gcd:=a else gcd:=gcd(b, a mod b);
  end;

x0:=gcd(a,b);
y0:=(a*b)div x0;
..........

板凳

枚举法

3 楼

楼上地说得好模糊 能不能讲清楚点


我在网上看见别人写的程序 有点不能理解 最后他用z所含的质数的个数表示了答案
我想问下为什么
Program P1131; 
var
 ans,x,y,z,p,k:longint;
 i:integer;

 begin
  readln(x,y);
  if(y mod x<>0)then
  begin
    writeln(0); 
exit;
  end;
  z := y div x;
  p:=2;
  k:=0;
  while(z>1) do
  begin
    if(z mod p=0) then
    begin
    inc(k);
    while(z mod p=0) do z:=z div p;    
    end;
    inc(p);          
  end;
  ans:=1; 
for i:=1 to k do
    ans:=ans*2;
  writeln(ans);
 end.

4 楼

var
f1,f2:text;
x3,x4,k,x1,x2:longint;
s:int64;
i:integer;
b,a:array[-1..1000000] of longint;
begin
 readln(x1,x2);x3:=x2;x4:=x1;
 for i:=2 to x2 do
    repeat
    if x2 mod i=0 then
    begin
      x2:=x2 div i;a[i]:=a[i]+1;if a[i]=1 then begin k:=k+1;b[k]:=i;end;
    end;
    until x2 mod i<>0;
 for i:=2 to x1 do
  repeat
    if x1 mod i=0 then
    begin
      x1:=x1 div i;a[i]:=a[i]-1;
    end;
  until x1 mod i<>0;
 s:=1;
 for i:=1 to k do
     if a[b[i]]>0 then s:=s*2;
   if x3 mod x4<>0 then writeln(0) else writeln(s);
end.

数学方法:分解质因数!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册