主题:输入xO,yO 要求P、Q以xO为最大公约数,以yO为最小公倍数。
zy00017
[专家分:0] 发布于 2006-11-13 16:55:00
描述 Description
输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。
条件:1.P、Q是正整数
2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
试求,满足条件的所有可能的两个正整数的个数。
输入格式 Input Format
两个正整数
输出格式 Output Format
满足条件的所有可能的两个正整数的个数
回复列表 (共4个回复)
沙发
zjsxwc [专家分:60] 发布于 2006-11-13 19:05:00
穷举吧
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;
..........
板凳
bigchen [专家分:1940] 发布于 2006-11-13 23:29:00
枚举法
3 楼
zy00017 [专家分:0] 发布于 2006-11-13 23:40:00
楼上地说得好模糊 能不能讲清楚点
我在网上看见别人写的程序 有点不能理解 最后他用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 楼
zjsxwc [专家分:60] 发布于 2006-11-14 08:45:00
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.
数学方法:分解质因数!!!
我来回复