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^0 7^0…
21=2^0 3^1 5^0 7^1 … …
Entonces el máximo común divisor = 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)) … p >
Entonces primero podemos descomponer b1 en factores primos y luego buscar en función de la relación exponencial entre el máximo común divisor y el mínimo común múltiplo.
Definir variables
p, x, c: matriz [0..entero largo de 1000]
a0, a1, b0, b1, I, j; , k, m, tot, t, n: entero largo;
Función gcd(a, b: entero largo): entero largo;
Inicio
Si b= 0 luego salir(a) else exit(gcd(b, a mod b));
Fin
Proceso dfs(i, suma: longint); p>Definir variables
max, j: longint;
Inicio
Está bien si gt
Inicio
Inc(tot);
p[tot]:= suma;
Salir;
Fin;
max: = suma;
dfs(i 1, máximo);
para j:=1 a c[i] hacer
Iniciar
max:= max * x[I];
dfs(i 1, máximo
Fin
Fin; Programa de trabajo(b: longint);
var i, p: longint;
Inicio
I: = 2;
p := b;
Y i lt=sqrt(p) hago
Iniciar
Si p mod i=0, entonces
Inicio
Inc(m);
x[m]:= I;
c[m]:= 0;
Repetir
Inc(c[m]);
p:= p div I;
Hasta p mod i lt gt0;
Fin;
inc(1);
Fin;
Si p lt gt entonces 1
Inicio
Inc(m);
x[m]:= p;
c[m]:= 1;
Fin;
dfs(1,1);
Fin;
Inicio
readln(n);
Para i: = 1 a n hacer
Inicio
readln(a0, a1, b0, b 1);
fillchar(p, sizeof(p), 0) ;
fillchar(x, tamaño de(x), 0);
fillchar(c, tamaño de(c),
m:= 0 ;
tot:= 0;
t:= 0;
trabajo(b 1);
para j:=1 a tot do
si (gcd(p[j], a0)=a1) y ((p[j] div gcd(p[j], b0) * b0)=b1) entonces Inc( t );
writeln(t);
Fin;
Fin.