Büyük tam sayıları çarpanlara ayırmak neden zor olarak değerlendiriliyor?


17

En verimli bir algoritma faktörler hesaplayabilir bulunan bir yerde okumak zaman, ama yazdığı kod O ( n ) ya da Muhtemelen O ( n log n ) bölünme ve modülün ne kadar hızlı olduğuna bağlı olarak ... Bir yerde bir şeyleri yanlış anladığımdan eminim, ama nerede olduğundan emin değilim.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
Google "sözde polinom".
Raphael

Bu algoritma aslında çok yavaştır - sayı asal bir sayı ise, yinelemeli (sayı) sürelerdeki döngü. Sqrt (sayı) yinelemelerinden kurtulmanızı sağlayan çok basit bir argüman var.
gnasher729

Yanıtlar:


26

Sen numara karıştırıyorsun temsil etmek için gereken bit sayısı ile n . Burada b = n'yi temsil etmek için gereken bit sayısı (yaninnb=n ). Bu büyük bir fark yaratıyor. Bir O ( n ) zaman algoritması, O ( 2 b ) zaman algoritmasıdır - bit sayısında üsteldir. Buna karşılık, bulduğunuz "verimli" algoritma içinde altüssel bir çalışma süresi vardır b .blgnO(n)O(2b)b

Örnek: düşünün (2 milyon). O zaman b = 21 bit n sayısını temsil etmek için yeterlidir . Yani, O ( 2)n=2,000,000b=21nçok daha hızlı olan bir algoritma daha olacaktırO(2b). BirO(n)algoritması ikinci kategoriye girer, yani çok yavaştır.O(2b1/3)O(2b)O(n)

Bkz. Https://en.wikipedia.org/wiki/Integer_factorization


1
Bunun böyle basit bir şey olduğunu biliyordum.
EnderShadow

3
@EnderShadow: Ayrıca, faktörü şu anda mevcut olan donanım kullanılarak zor olarak kabul edilen ve örneğin RSA şifrelemesinde kullanılan sayıların (yani n > 2 1,000 ) ya da daha fazlası vardır. Bir egzersiz olarak, bilgisayar da çalıştırabilirsiniz varsayarak O ( n ) o faktöre alacağını kaç yıl diyelim, algoritma, saniyede bir milyar yinelemeleri, hesapla n 2 1,000 . (Eğer ilk tepkiniz "bu doğru olamaz!" İse, muhtemelen doğru bir şekilde hesaplamış olursunuz.)b>1,000n>21,000O(n)n21.000
Ilmari Karonen

1

burada kabaca iki soru var, kodunuz hakkında genel ve belirli bir soru. belirli olan diğer cevapta ele alınır. faktoring karmaşıklığı ile ilgili başlıktaki genel soru çok derindir. maalesef faktoringin P'nin dışında (çoğunlukla duruma bağlı) “birçok uzman denedi ve başarısız oldu” dışında bazı bilimsel kanıtlar yoktur ve bazı uzmanlar P'nin içinde olduğuna inanmaktadır; karmaşıklık teorisinin açık problemlerinden biri (ve çözülmesi çok zor) olarak kabul edilir. onlarca yıldır "ağır saldırı" sonra en iyi algoritmalar üstel. faktoring karmaşıklığı, " P " ve NP arasında tam olduğu bilinen ancak şu ana kadar sınıflandırılmayan "birkaç istisnai problemden" biridir .

belirtildiği gibi, karmaşıklık 1980'lerin ortalarında kriptografik güvenliğin varsayımlara bağlı olduğu RSA şifreleme sistemlerinde kullanılıncaya kadar ("kabaca") bir sorun değildi . (diğer iki "tam olarak cesaret vermeyen" ilgili veri noktası: P-time kuantum çarpanlarına ayırma ve öncelik testi için Shors algoritmasının ünlü / ünlü AKS algoritmasında 2000'lerin başında P'de olduğu kanıtlanmıştır .) olası bir olumlu sonuç onun içinde quasipolynomial zamanda NP tam (P ≠ NP varsayılarak ve NP tam bir olandan daha zayıf olsa da, üstel düşük bağlanmış bir zaman ) ama yine de teknik olarak "sert".

şimdiye kadar bu anahtar subj üzerinde büyük bir anket bulamadı. ancak bakınız


başka bir olası görünüşte "uç-durum" senaryosu, faktoringin P'de olabileceğidir, ancak hala uygulanabilir bir algoritma yoktur. aka galaktik algoritmalar
vzn

RSA'nın iki büyük primerin ürününü faktorize etmekle ilgili olduğu belirtilmelidir (burada birinin primerleri bildiği ve sadece çoğalttığı ve bir başkasına ürün verildiği ve primerleri bulması gerektiği). İki büyük primerin ürünlerini faktörebilen, ancak ikiden fazla büyük primerin ürünlerini etkileyemeyen bir algoritma olabileceği düşünülebilir . Tıpkı büyük asallar olan (ancak daha önce büyük asallar olarak bilinmeyen) faktoring sayılarının polinom zamanında yapılabileceği gibi.
gnasher729
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.