Program Angka Sempurna Dengan Python: Bagaimana cara memeriksa apakah suatu angka sempurna atau tidak?

Diterbitkan: 2021-01-29

pengantar

Suatu bilangan dikatakan bilangan sempurna jika jumlah pembagi sejatinya (tidak termasuk bilangan itu sendiri) sama dengan bilangan tersebut.

Untuk mendapatkan ide yang lebih baik mari kita perhatikan sebuah contoh, pembagi yang tepat dari 6 adalah 1, 2, 3. Sekarang jumlah dari pembagi ini sama dengan 6 (1+2+3=6), jadi 6 dikatakan bilangan sempurna . Sedangkan jika kita perhatikan bilangan lain seperti 12, maka pembagi sejati dari 12 adalah 1, 2, 3, 4, 6. Nah jumlah dari pembagi tersebut tidak sama dengan 12, jadi 12 bukanlah bilangan sempurna.

Pemrograman dengan Python relatif lebih sederhana dan menyenangkan jika dibandingkan dengan bahasa lain karena sintaksnya yang lebih sederhana, keterbacaan yang baik. Sekarang kita sudah jelas dengan konsep bilangan sempurna, mari kita tulis program python untuk memeriksa apakah suatu bilangan adalah bilangan sempurna atau tidak. Mari kita buat kode python untuk memeriksa apakah input pengguna yang diberikan adalah angka yang sempurna atau tidak dan jelajahi kesenangan dalam pengkodean dengan python. Lihat program ilmu data kami jika Anda tertarik untuk mendapatkan keahlian.

Baca: Program Pola Python

Daftar isi

Program Python

Solusi dasar untuk menemukan bilangan sempurna adalah dengan mengulang 2 ke nomor-1, mempertahankan jumlah pembagi yang tepat, dan memeriksa apakah jumlahnya sama dengan bilangan tersebut.

n=int(input("masukkan bilangan"))
jumlah = 1
untuk saya dalam rentang (2,n):
jika(n%i==0):
jumlah=jumlah+i
jika(jumlah==n):
print(n,”adalah bilangan sempurna”)
lain:
print(n,”bukan bilangan sempurna”)

Mari kita menelusuri kodenya.

Kami pertama-tama menginisialisasi n dengan input pengguna dan mengetikkannya ke bilangan bulat karena secara default input pengguna dibaca sebagai string dalam python. Kita perlu memeriksa apakah n adalah bilangan sempurna atau tidak. Perhatikan bahwa kita menginisialisasi jumlah dengan 1 karena 1 adalah pembagi yang tepat untuk semua bilangan bulat (tidak termasuk nol), sehingga kita dapat mengecualikan iterasi dalam loop dan langsung mulai dari 2.

Kami mengulangi 2 ke nomor-1 dan menambahkan bilangan bulat untuk menjumlahkan jika itu adalah pembagi yang tepat. Dan akhirnya, ketika kita keluar dari loop kita memeriksa apakah jumlah yang diperoleh sama dengan angka atau tidak. Sepotong kue kan?

Versi Sedikit Dioptimalkan

Setelah menjalankan program di atas, kami mungkin memiliki pertanyaan, dapatkah kami mengoptimalkannya? Yah, tapi kita bisa mengurangi jumlah iterasi menjadi angka/2 tanpa mengubah algoritmanya. Karena kita mendapat gagasan bahwa suatu bilangan tidak dapat memiliki pembagi sejati yang lebih besar dari bilangan/2.

n=int(input("masukkan bilangan"))
jumlah = 1
untuk i dalam rentang(2,n//2+1):
jika(n%i==0):
jumlah=jumlah+i
jika(jumlah==n):
print(n,”adalah bilangan sempurna”)
lain:
print(n, "bukan bilangan sempurna")

Cuplikan di atas hampir mirip dengan yang sebelumnya, dengan satu-satunya perbedaan dari pengulangan hingga nomor/2. Perhatikan bahwa kita melakukan pembagian bilangan bulat untuk menghindari konversi ke tipe float, dan kita mengulang sampai n//2+1 karena bilangan bulat terakhir dalam rentang tidak dipertimbangkan dalam loop python.

Keterbatasan

Ketika kita diminta untuk menemukan bilangan sempurna dalam rentang tertentu, maka solusi kita akan menggunakan waktu yang sebanding dengan bilangan^2 yaitu, kompleksitas waktu O(n²). Karena kita perlu mengulang setiap angka dalam rentang yang diberikan dan kemudian memeriksa pembagi yang tepat untuk setiap angka. Dan beberapa bilangan memenuhi syarat bilangan sempurna. Misalnya, jumlah bilangan sempurna dalam rentang 0 hingga 1000 hanya 3 (6, 28, 496).

Ada solusi yang dioptimalkan untuk ini di mana kita tidak perlu mengulang semua elemen untuk menemukan pembagi yang tepat, rumus Euclid menyatakan bahwa 2 n 1(2 n 1) adalah bilangan sempurna genap di mana kedua n, (2 n − 1) adalah bilangan prima. Misalnya, 6 memenuhi persamaan di atas dengan n sebagai 2 dan keduanya 2, 2 2 1 (2 2 1 = 3) adalah bilangan prima. Tetapi kami tidak dapat menjawab jika kami diminta untuk menemukan apakah ada bilangan sempurna yang ganjil.

Juga, kita tahu bahwa setiap bahasa memiliki batas untuk rentang bilangan bulat yang dapat disimpannya. Dengan keterbatasan ini, kita mungkin tidak memiliki cara untuk menemukan bilangan sempurna terbesar.

Semua keterbatasan ini dihadapi jika jumlah input kami besar, tetapi jika jumlah input kami kecil maka solusi awal kami akan bekerja dalam waktu yang lebih singkat.

Baca Juga: Kerangka Kerja Python untuk Pengembangan Web

Kesimpulan

Kami telah mengetahui definisi dan memahami konsep di balik bilangan sempurna. Berjalan melalui solusi dasar untuk menemukan nomor adalah nomor sempurna atau tidak. Dan setelah melihat solusi awal, kami telah mengoptimalkannya sedikit dengan mengurangi jumlah iterasi. Kami telah mengatasi keterbatasan algoritme kami dan membahas rumus Euclid untuk menemukan bilangan sempurna genap.

Sekarang Anda mengetahui program python untuk memeriksa apakah suatu angka adalah angka yang sempurna atau tidak. Coba tulis kode Anda sendiri dan coba optimalkan jika ditemukan iterasi yang tumpang tindih. Juga, coba buat kode untuk menemukan bilangan sempurna dalam kisaran angka yang diberikan.

Jika Anda penasaran untuk belajar tentang python, ilmu data, lihat Program PG Eksekutif IIIT-B & upGrad dalam Ilmu Data yang dibuat untuk para profesional yang bekerja dan menawarkan 10+ studi kasus & proyek, lokakarya praktis, bimbingan dengan pakar industri , 1-on-1 dengan mentor industri, 400+ jam pembelajaran dan bantuan pekerjaan dengan perusahaan-perusahaan top.

Jelaskan kerumitan Program Angka Sempurna Dengan Python.

Suatu bilangan dikatakan bilangan sempurna jika sama dengan jumlah pembaginya. Untuk memeriksa apakah suatu bilangan sempurna atau tidak, kita memiliki dua pendekatan. Pendekatan pertama adalah pendekatan naif di mana kompleksitas waktu adalah O(n2) karena kita mengulangi “j” kali untuk setiap “i” dan memeriksa pembaginya.
Pendekatan kedua adalah solusi yang dioptimalkan di mana kompleksitas waktu adalah O(√n). Di sini kita tidak perlu mengulangi setiap nomor. Kita bisa langsung menyimpulkannya menggunakan rumus Euclid yaitu:
2n−1(2n 1), di mana n dan 2n adalah bilangan prima.
Namun, rumus ini tidak berfungsi untuk bilangan sempurna ganjil dan karenanya, kita harus mencari pendekatan lain untuk bilangan sempurna tersebut.

Apa batasan pendekatan Program Bilangan Sempurna?

Kedua pendekatan ini baik tetapi hanya sampai batas tertentu. Tak satu pun dari mereka dapat dianggap sebagai pendekatan yang sempurna karena beberapa teknis. Keterbatasan dari pendekatan ini adalah sebagai berikut:

1. Pendekatan pertama dan naif lebih buruk karena menghabiskan banyak waktu dan memori dan memiliki kompleksitas waktu O(n2). Ini karena kita menggunakan loop bersarang dan mengulangi loop dalam n kali untuk setiap elemen loop luar. Pendekatan ini naif dan akan memberikan TLE untuk nilai n yang lebih besar dan karenanya tidak direkomendasikan.
2. Kemudian kita memiliki pendekatan optimasi yang menyelesaikan masalah di O(√n). Ini adalah pendekatan yang baik kecuali jika angka sempurna ganjil ikut bermain. Kami tidak dapat memeriksa bilangan sempurna ganjil dengan pendekatan ini karena didasarkan pada "rumus Euclid untuk bilangan sempurna genap" yang hanya berfungsi untuk bilangan sempurna genap.

Apakah Python cocok untuk pemrograman kompetitif?

Python berevolusi dari C/C++ dan bahkan Java dan dianggap sebagai bahasa yang paling cocok untuk tujuan penelitian dan pengembangan. Tetapi ketika datang ke pemrograman kompetitif, sebagian besar komunitas pemrograman menghindari Python. Alasannya karena Python adalah yang paling lambat di antara ketiga bahasa ini.