Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah anda boleh mengoptimumkan algoritma brute-force untuk mencari faktor utama dalam Python?

Bagaimanakah anda boleh mengoptimumkan algoritma brute-force untuk mencari faktor utama dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-07 19:09:03230semak imbas

How can you optimize the brute-force algorithm for finding prime factors in Python?

Mencari Faktor Utama dalam Python: Panduan Komprehensif

Menentukan faktor perdana ialah tugas asas dalam teori nombor. Satu pendekatan untuk mencari faktor utama terbesar adalah melalui algoritma brute-force. Walau bagaimanapun, tidak semua algoritma dicipta sama.

Algoritma Brute-Force

Satu algoritma yang biasa digunakan melibatkan ujian nombor secara berperingkat sehingga nombor ditemui yang membahagi sama rata kepada yang asal nombor. Mari kita pertimbangkan contoh kod:

n = 600851475143
i = 2
while i * i < n:
    while n % i == 0:
        n = n / i
    i = i + 1

print(n)

Kod ini mencari faktor perdana terbesar 600851475143. Walau bagaimanapun, ia mengalami ketidakcekapan, mengambil masa kira-kira 0.01 saat untuk diselesaikan.

Dioptimumkan Algoritma Brute-Force

Versi algoritma brute-force yang dipertingkat boleh mengurangkan masa jalan dengan ketara:

def largest_prime_factor(n):
    i = 2
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
    return n

Algoritma ini ditamatkan sebaik sahaja i melebihi punca kuasa dua n , yang berkesan menghapuskan ujian banyak nombor yang tidak perlu. Akibatnya, masa jalan dikurangkan secara mendadak, diselesaikan dalam kira-kira 388 mikrosaat untuk input yang sama.

Pemfaktoran Perdana Lengkap

Jika matlamatnya adalah untuk mendapatkan perdana lengkap pemfaktoran nombor, sedikit pengubahsuaian pada algoritma diperlukan:

def prime_factors(n):
    i = 2
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return factors

Algoritma ini mengekalkan senarai yang dipanggil 'faktor' yang menyimpan faktor perdana semasa ia ditemui. Apabila n lebih besar daripada 1 pada penghujung, ia menunjukkan faktor perdana akhir, yang kemudiannya ditambahkan pada senarai.

Kesimpulannya, memilih algoritma pemfaktoran perdana yang cekap adalah penting untuk prestasi. Algoritma brute-force yang dioptimumkan memberikan peningkatan yang ketara dalam kelajuan, manakala algoritma pemfaktoran lengkap menawarkan pemfaktoran perdana penuh bagi nombor tertentu.

Atas ialah kandungan terperinci Bagaimanakah anda boleh mengoptimumkan algoritma brute-force untuk mencari faktor utama dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn