var
ans,i,k,n,x,y,a0,a1,b0,b1:longint;
c:array[0..100000] of longint;
procedure closes; begin halt; end;
function ys(a,b:longint):longint;
var x:longint;
begin
x:=a mod b;
while x>0 do
begin
a:=b; b:=x; x:=a mod b;
end;
exit(b);
end;
begin
readln(n);
for k:=1 to n do begin
ans:=0;
readln(a0,a1,b0,b1);
x:=a0 div a1; y:=b1 div b0;
fillchar(c,sizeof(c),0);
for i:=1 to trunc(sqrt(b1)) do begin
if b1 mod i=0 then
begin
inc(c[0]);
c[c[0]]:=i;
inc(c[0]);
c[c[0]]:=b1 div i;
end;
end;
for i:=1 to c[0] do begin
if c[i] mod a1 <>0 then continue;
if ys(c[i] div a1,x)=1 then
if ys(b1 div c[i],y)=1 then
begin
inc(ans);
//writeln(n,c[i]:5,c[i] mod a1:5);
end;
end;
writeln(ans);
end;
end.
RT,
你算重复了b1 div c[i]=c[i]的时候,加一个判断就行了
现在突然感觉pascal怎么比C++快。。。。C++这种方法最后一组要超时。。。