Perché il factoring di interi di grandi dimensioni è considerato difficile?


17

Ho letto da qualche parte che l'algoritmo più efficiente trovato può calcolare i fattori nel tempo , ma il codice che ho scritto è o possibilmente seconda della divisione e del modulo veloci. Sono abbastanza sicuro di aver frainteso qualcosa da qualche parte, ma non sono sicuro di dove. Ecco cosa scritto in forma di pseudo codice.O(exp⁡((64/9⋅b)1/3⋅(log⁡b)2/3)O(n)O(nlog⁡n)

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

3
"Pseudo polinomio" di Google.
— Raffaello

Tale algoritmo è in realtà molto lento - se il numero è un numero primo il ciclo mentre itera (numero) volte. C'è un argomento molto semplice che ti permette di cavartela con le iterazioni sqrt (numero).
— gnasher729,

Risposte:


26

Stai confondendo il numero con il numero di bit necessari per rappresentare . Qui il numero di bit necessari per rappresentare (quindi ). Questo fa un'enorme differenza. Un algoritmo -time è un algoritmo -time - esponenziale nel numero di bit. In confronto, l'algoritmo "efficiente" che hai trovato ha un tempo di esecuzione che è poco costoso in .nnb=nb≈lg⁡nO(n)O(2b)b

Esempio: considerare (2 milioni). Quindi bit sono sufficienti per rappresentare il numero . Quindi, un algoritmo sarà molto più veloce di un algoritmo . Un algoritmo rientra in quest'ultima categoria, cioè molto lento.n=2,000,000b=21nO(2b1/3)O(2b)O(n)

Vedi https://en.wikipedia.org/wiki/Integer_factorization


1
Sapevo che era qualcosa di semplice.
— EnderShadow il

3
b>1,000n>21,000O(n)n≈21,000

1

hai circa due domande qui, una generale e una specifica sul tuo codice. quello specifico viene gestito nell'altra risposta. la domanda generale nel titolo sulla complessità del factoring è molto profonda. sfortunatamente non esiste una forte evidenza scientifica che il factoring sia al di fuori di P diverso da (il per lo più circostanziale) "molti esperti hanno tentato e fallito" e alcuni esperti ipotizzano che sia all'interno di P; è considerato uno dei principali (e molto difficili da risolvere) problemi aperti della teoria della complessità. dopo decenni di "attacchi pesanti" i migliori algoritmi sono esponenziali. la complessità del factoring è uno dei "pochi problemi eccezionali" che è noto risiedere "tra" P e NP complete ma non è stato classificato come finora.

come è stato sottolineato, la complessità non è stata un grosso problema fino a quando non è stata utilizzata ("approssimativamente") nei sistemi di crittografia RSA a metà degli anni '80, dove la sicurezza crittografica dipende dal presupposto. (altri due punti dati correlati "non esattamente incoraggianti": l'algoritmo Shors per il factoring quantistico P-time e il test di primalità si è dimostrato in P nei primi anni 2000 nel famoso / celebre algoritmo AKS .) un possibile risultato positivo sarebbe che è nel tempo quasipolinomiale , che è più debole del NP completo (supponendo che P ≠ NP e NP completi abbiano un tempo esponenziale inferiore rispetto ) ma tecnicamente "duro".

finora non ho trovato un ottimo sondaggio su questo argomento chiave. comunque vedi anche


un altro possibile scenario apparentemente "marginale" è che il factoring potrebbe essere in P ma non esiste ancora un algoritmo fattibile. aka algoritmi galattici
— vzn

Va detto che RSA riguarda il factoring del prodotto di due numeri primi di grandi dimensioni (dove qualcuno conosce i numeri primi e li ha semplicemente moltiplicati, e qualcun altro riceve il prodotto e dovrebbe trovare i numeri primi). È possibile che esista un algoritmo in grado di fattorizzare i prodotti di due numeri primi di grandi dimensioni, ma non i prodotti di più di due numeri primi di grandi dimensioni. Proprio come i numeri di factoring che sono numeri primi grandi (ma che prima non sono noti come numeri primi grandi) possono essere fatti in tempi polinomiali.
— gnasher729,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.