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/9b)1/3(logb)2/3)O(n)O(nlogn)

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=nblgnO(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)n21,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.