Mencetak Siri Nombor Perdana dalam Python
Mengenal pasti nombor perdana ialah konsep asas dalam matematik dan pengaturcaraan. Nombor perdana ialah integer yang lebih besar daripada 1 yang bukan hasil darab dua integer yang lebih kecil. Kod Python berikut bertujuan untuk mencetak satu siri nombor perdana dari 1 hingga 100.
Kod dan Isu
Satu pendekatan biasa untuk mencari nombor perdana ialah dengan melelaran melalui nombor dari 2 hingga n. Untuk setiap nombor, semak sama ada ia boleh dibahagikan dengan mana-mana nombor antara 2 dan nombor itu sendiri (tidak termasuk 1). Jika ia boleh dibahagikan, ia bukan nombor perdana; sebaliknya.
Pertimbangkan kod berikut bertujuan untuk mencetak nombor perdana antara 1 dan 100:
<code class="python">for num in range(1, 101): for i in range(2, num): if num % i == 0: break else: print(num) break</code>
Walau bagaimanapun, kod ini menghadapi isu di mana nombor ganjil dicetak dan bukannya nombor perdana. Kecacatan timbul kerana gelung luar berulang bukan sahaja ke atas nombor perdana tetapi juga nombor komposit (berbilang nombor lain). Akibatnya, syarat jika num % i != 0 menjadi benar untuk nombor komposit ganjil seperti 9, yang membawa kepada pencetakan yang salah bagi semua nombor ganjil.
Penyelesaian dan Pengoptimuman
Untuk membetulkan ini, kita mesti mengubah suai kod untuk menyemak nombor perdana secara eksplisit. Berikut ialah versi yang disemak:
<code class="python">for num in range(2, 101): # Start at 2 as 1 is not prime prime = True for i in range(2, num): if num % i == 0: prime = False if prime: print(num)</code>
Dalam kod ini, kami memperkenalkan perdana pembolehubah boolean, pada mulanya ditetapkan kepada Benar. Kami kemudian menyemak setiap nombor antara 2 dan num-1 (tidak termasuk num) menggunakan gelung dalam. Jika nombor boleh dibahagi dengan sebarang nombor i, kami menetapkan perdana kepada Palsu, menunjukkan bahawa ia bukan perdana. Selepas gelung dalam, jika perdana kekal Benar, kami mencetak nombor.
Kod ini mengenal pasti nombor perdana dalam julat yang ditentukan dengan tepat. Walau bagaimanapun, ia boleh dioptimumkan lagi dengan hanya memeriksa pembahagi sehingga punca kuasa dua num. Ini kerana sebarang faktor yang lebih besar daripada punca kuasa dua akan mempunyai faktor sepadan kurang daripada punca kuasa dua.
Berikut ialah versi yang dioptimumkan:
<code class="python">for num in range(2, 101): prime = True for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: prime = False if prime: print(num)</code>
Dengan menggunakan tweak ini, kod mencetak dengan berkesan siri nombor perdana antara 1 dan 100.
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Percetakan Nombor Perdana dalam Python untuk Keputusan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!