El usuario2969 pidió la respuesta completa así que la publicaré aquí.
El primer paso es tomar el gcd de los dos números. Esto se puede hacer con el algoritmo euclidiano y es rápido: la implementación ingenua tarda un tiempo cuadrático, lo cual es bastante bueno. Llamemos a este número g.
El siguiente paso es factorizar g. Este es el paso más difícil si g es grande. Enfoque básico: dividir g por los primos hasta un límite fijo, digamos 10^5, o hasta que lo que quede sea menor que el cuadrado del primo actual. En este punto, compruebe la primalidad de lo que queda (primero con una prueba de Miller-Rabin y luego, si lo desea, con la prueba de su elección, APR-CL, ECPP, etc.). Si el número es compuesto, utilice el rho de Pollard y/o el SQUFOF de Shanks. (Siempre que encuentre un factor, compruebe su primalidad y la de su cofactor y vuelva a este paso si es compuesto). Si éstos no encuentran un factor, utilice ECM para buscar un factor pequeño. En un punto de cruce adecuado, puede utilizar MPQS/SIQS para factorizar el número. Si el número es mayor, aumente los límites de ECM. Si no se encuentra ningún factor hasta ~40 dígitos, considere la posibilidad de utilizar GNFS para factorizar lo que queda. Esto llevará al menos un día, dependiendo del tamaño del número restante.
Una vez que tienes la factorización es fácil contar el número de divisores: empieza un acumulador en 1, y para cada primo multiplica el acumulador por uno más que el exponente de ese primo.
Tenga en cuenta que para este problema puede ser capaz de cortocircuitar la factorización para los números de un tamaño adecuado por el ensayo de dividir hasta la raíz cúbica del número y demostrar que lo que queda es compuesto y no un cuadrado. En este caso, el número de divisores es el número de divisores de la parte factorizada por 4, ya que la parte no factorizada es un semiprimo libre de cuadrados.
Aquí hay algunos scripts para calcular el valor.
Pari/GP : common(m,n) = numdiv(gcd(m,n))
Mathematica: Common[m_,n_] := DivisorSigma[0,GCD[m,n]]