Eu tenho dois números, que são cada um o produto de um grande número de números menores que eu conheço. Quero encontrar o MDC (maior divisor comum) desses dois números. Existe alguma maneira de fazer uso da fatoração parcial que tenho para acelerar o processo?
Em particular, cada número maior é o produto de números menores, cada um da ordem de . Não sei nada sobre a fatoração de números menores.
Editar: Enquanto os números de entrada são de cerca de 120.000.000 de bits, o GCD é de cerca de 500.000 de bits. Os fatores dos números são particularmente em sequência. Todos são números inteiros em um intervalo consecutivo.
Todos os algoritmos GCD que eu vi usam os números diretamente, não de forma parcialmente fatorada ou algo assim. Existem algoritmos que poderiam incorporar essas informações para acelerar as coisas?
fonte
Respostas:
Você pode calcular os GCDs aos pares dos fatores. Você precisa dividir as GCDs dos fatores para evitar encontrar o mesmo fator GCD duas vezes:
Infelizmente, acho que isso não é notavelmente mais rápido que o cálculo do MDC dos dois números A e B.
fonte
Houve um problema semelhante que foi resolvido de maneira razoavelmente eficiente: suponha que você esteja usando o RSA, que é todo construído em produtos de dois primos grandes, nos quais os produtos não podem ser fatorados em tempo razoável. Mas se você tiver dois produtos pq e p'q 'e p = p' ou q = q ', poderá calcular o MDC e obter p = p' ou q = q 'e o outro fator é trivial. Obviamente, se p = p 'e também q = q', então isso não ajuda.
Não imagine que alguém gere um bilhão desses produtos e seja um pouco descuidado. Um hacker descobre que alguns números são idênticos, então p = p 'e q = q', então é um bom palpite que alguns pares tenham um gcd ≠ 1. E isso aconteceu na vida real com roteadores cuja criptografia poderia ser rachado como resultado.
Desculpe, não tenho nenhuma referência e a história é um pouco antiga, mas você deve encontrá-la. Faz alguns anos, talvez seis ou mais.
fonte