I ler, que o algoritmo mais eficiente encontrado pode calcular os factores em o tempo, mas o código que escreveu é S ( n ) ou possivelmente O ( n log n ), dependendo da rapidez da divisão e do módulo.Tenho certeza de que não entendi algo em algum lugar, mas não sei onde. Aqui está o que escrevi em forma de pseudo-código.
function factor(number) -> list
factors = new list
if number < 0
factors.append(-1)
number = -number
i = 2
while i <= number
while number % i == 0
factors.append(i)
number /= i
i++
return factors
complexity-theory
time-complexity
factoring
primes
EnderShadow
fonte
fonte
Respostas:
Você está confundindo o número com o número de bits necessários para representar n . Aqui b = o número de bits necessários para representar n (então b ≈ lg n ). Isso faz uma grande diferença. Um algoritmo de tempo O ( n ) é um algoritmo de tempo O ( 2 b ) - exponencial no número de bits. Em comparação, o algoritmo "eficiente" encontrado possui um tempo de execução subexponencial em b .n n b = n b ≈ lgn O (n ) O (2b) b
Exemplo: considere (2 milhões). Então b = 21 bits são suficientes para representar o número n . Assim, um algoritmo que é O ( 2 b 1 / 3 ) será muito mais rápida do que um algoritmo que é O ( 2 b ) . Um algoritmo O ( n ) se enquadra na última categoria, ou seja, muito lento.n = 2 , 000 , 000 b = 21 n O ( 2b1 / 3) O (2b) O ( n )
Consulte https://en.wikipedia.org/wiki/Integer_factorization
fonte
você tem aproximadamente duas perguntas aqui, uma geral e uma específica sobre seu código. o específico é tratado na outra resposta. a pergunta geral no título sobre a complexidade do fatoramento é muito profunda. infelizmente, não há fortes evidências científicas de que o fatoramento esteja fora de P, exceto (a maioria das circunstâncias) "muitos especialistas tentaram e falharam" e alguns especialistas conjecturam que está dentro de P; é considerado um dos principais (e muito difíceis de resolver) problemas abertos da teoria da complexidade. após décadas de "ataque pesado", os melhores algoritmos são exponenciais. a complexidade da fatoração é um dos "poucos problemas excepcionais" que se sabe "entre" P e NP completo, mas ainda não foi classificado como até agora.
como é apontado, a complexidade não era muito problemática até ser usada ("aproximadamente") nos sistemas de criptografia RSA em meados da década de 1980, onde a segurança criptográfica depende da suposição. (outros dois pontos de dados relacionados "não exatamente encorajadores": o algoritmo Shors para fatoração quântica no tempo P e teste de primalidade foi comprovado em P no início dos anos 2000 no famoso / célebre algoritmo AKS .) um possível resultado positivo seria que está no tempo quase-polinomial , que é mais fraco que o NP completo (supondo que P ≠ NP e NP completo tenham um limite exponencial de tempo ), mas ainda tecnicamente "difícil".
até agora, não encontramos uma grande pesquisa sobre este assunto importante. no entanto, veja também
Factoring pode ser mais fácil do que você pensa / Cohn
Factoring inteiro de evidência em P / mathoverflow (mencionando que Sarnak pensa que está em P e resposta de Cohn também)
"Mundos Impagliazzos, uma visão pessoal da complexidade média dos casos / Impagliazzo. Fala sobre suposições / conjecturas teóricas da complexidade em geral relacionadas à criptografia (por exemplo, fatoração). Muitos / a maioria dos principais (por exemplo, P vs NP etc.) ainda estão abertos após décadas.
fonte