Preguntas interesantes de la historia de la programación

Basado en la relación especial entre el mínimo común múltiplo y el máximo común divisor, el índice de factores primos se descompone y optimiza. Por ejemplo, para dos números, se puede obtener la siguiente fórmula descomponiendo los factores primos.

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)) …

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.