Red de conocimiento informático - Problemas con los teléfonos móviles - La pregunta de P1753HackSon en vijos es interesante, ¡gracias!

La pregunta de P1753HackSon en vijos es interesante, ¡gracias!

Optimice basándose en la relación especial entre el mínimo común múltiplo y el máximo exponente de factor primo de factorización común. Por ejemplo, dos números se pueden descomponer en factores primos para obtener la siguiente ecuación

A=p1^a1+p2^a2+p3^a3......

B =p1 ^b1+p2^b2+p3^a3......

Por ejemplo, 6 y 21 se pueden descomponer en

6=2^1+3^ 1+5^ 7^0......

21=2^3^1+5^7^1......

Entonces el máximo divisor común = 2^ (min(a1,b1))+3^(min(a2,b2))+5^(min(a3,b3))+7^(min(a4,b4) )....

Mínimo común múltiplo=2^(max(a1,b1))+3^(max(a2,b2))+5^(max(a3,b3))+7 ^(max(a4, b4))...

Entonces primero podemos descomponer b1 en factores primos y luego encontrarlo en función de la relación entre el máximo común divisor y el mínimo común múltiplo en el exponente. .

var

p,x,c:array[0...1000] de entero largo;

a0,a1,b0,b1,i,j ,k,m,tot,t,n:longint;

función gcd(a,b:longint):longint

comenzar

if b=; 0 luego salir(a) else exit(gcd(b,a mod b));

end;

procedimiento dfs(i,sum:longint);

var

dfs(i+1,max);

para j:=1 a c[i] haga

comenzar

max:=max*x[i];

dfs(i+1,max);

fin;

fin;

procedimiento trabajo(b:longint);

var i,p:longint;

comenzar

i:=2;

p:=b;

mientras i<=sqrt(p) hago

comienzo

si p mod i=0 entonces

comenzar

inc(m);

x[m]:=i;

c[m]:=0;

repetir

inc(c[m]);

p:=p div i;

hasta p mod i<>0;

fin;

inc(i);

fin;

si p<>1 entonces

comienza

inc(m);

x[m]:=p;

c[m]:=1;

fin;

dfs(1,1);

fin;

comenzar

readln(n);

para i:=1 a n hacer

comenzar

readln(a0,a1,b0,b1);

fillchar(p ,sizeof( p),0);

fillchar(x,sizeof(x),0);

fillchar(c,sizeof(c),0);

m:=0;

tot:=0;

t:=0;

trabajo(b1).

para j:=1 tot do

if (gcd(p[j],a0)=a1) y ((p[j] div gcd(p[j],b0) * b0)=b1 ) luego inc(t);

writeln(t);

end;

end.