در این مقاله شما را با نحوهی نوشتن برنامه تشخیص عدد کامل در پایتون آشنا خواهیم کرد. عدد کامل یا Perfect Number مفهوم بسیار سادهای دارد. بهتر است در صورت لزوم برای درک بهتر قواعد پایتون به کار گرفته شده در این مقاله، اگر به برنامهنویسی و چالش حل مسئله علاقهمند هستید، تا پایان مقاله، با ما همراه باشید.
عدد کامل عددی است که با نصف مجموع مقسوم علیههای خود برابر باشد، یا به عبارت دیگر، برابر با مجموع مقسومعلیههای خود، به جز خودش باشد. برای درک بهتر موضوع یک مثال عددی را بررسی میکنیم.
عدد 6 را در نظر بگیرید. مقسوم علیههای 6 برابر اعداد 1، 2، 3 و 6 است. طبق تعریف عدد کامل، 6 عدد کاملی است؛ زیرا: 6=(1+2+3+6)*2/1 است و یا 6=1+2+3. عدد 12 عدد کاملی نیست چون مقسوم علیههای 12 به جز خودش عبارتند از {6، 4، 3، 2، 1} و از طرفی 6+4+3+2+1 برابر عدد 12 نیست.
حال که با مفهوم عدد کامل آشنا شدید به ارائهی الگوریتم برنامه میپردازیم.
تعیین این که عددی کامل است یا نه، بسیار ساده است. طبق تعریفی که از عدد کامل در بخش قبل ارائه شد، برای نوشتن کد آن توسط پایتون الگوریتم زیر را تعریف میکنیم:
با توجه به الگوریتم تعریف شده در مرحلهی قبل، ابتدا با دستور input ورودی را از کاربر میگیریم. چون که دستور input، ورودی را به شکل رشته (str) از کاربر میخواند، آن را با دستور int به عدد صحیح تبدیل میکنیم.
number=input("Enter Your Number:")
number=int(number)
برای تعیین مقسومعلیههای مثبت و کوچکتر از خود عدد، به راحتی با دستور حلقهی for اعداد در بازهی یک تا یکی کمتر از خود عدد را از نظر بخشپذیری بر عدد ورودی کاربر، بررسی میکنیم. همچنین با یک دستور جمع ساده اعدادی را که جزو مقسومعلیهها هستند و عدد ورودی بر آنها بخشپذیر است را با هم جمع میکنیم و در متغیر result قرار میدهیم. به کد زیر توجه کنید:
number=int(input("Enter Your Number:"))
result=0
for item in range(1,number):
if number%item==0:
result+=item
در پایان مقدار result را با عدد ورودی مقایسه میکنیم. اگر برابر بود عدد کامل است و اگر نه، کامل نیست.
if (result==number):
print("It is a perfect number.")
else:
print("It is not a perfect number.")
میتوانیم کد بالا را به شکل تابع تعریف کنیم:
def perfect_number(n):
sum = 0
for x in range(1, n):
if n % x == 0:
sum += x
return sum == n
تابع بالا در صورتی که عدد ورودی کامل باشد مقدار منطقی True را برمیگرداند.
اقلیدس ثابت کرد که 2p−1(2p − 1) عدد کامل زوج است هر زمان که 2p − 1 عدد اول باشد. برای مثال چهار عدد کامل تولید شده توسط این فرمول، با مقدار p که عددی اول هم هست، به شکل زیر میباشد:
برنامه تشخیص عدد کامل در پایتون
2p − 1 عدد اول Mersenne نام دارد. عدد اول Mersenne یکی کمتر از مربعات عدد دو است. برای اینکه 2p − 1 اول باشد، لازم است که خود p عدد اولی باشد. به هر حال این یک شرط لازم ولی غیر کافی است. برای مثال p=11 عدد اول است، ولی 211 − 1 = 2047 = 23 × 89 عددی اول نیست. به هر حال مقادیر اعداد اول که در قانون Mersenne صدق کنند، نادر هستند. حال میخواهیم کدی به کمک زبان پایتون بنویسیم که عددی را از کاربر بخواند، اگر آن عدد اول بود و در شرط اعداد اول Mersenne نیز صدق میکرد، عدد کامل متناظر با آن را تولید کند.
الگوریتم کد ما به شرح زیر خواهد بود:
اگر نه: اگر نه، چاپ کن ورودی حاصل در قانون Mersonne صدق نمیکند.
اگر بله: به مرحلهی بعد برو.
اگر اول بود برو مرحلهی بعد.
اگر نه، چاپ کن ورودی حاصل در قانون Mersonne صدق نمیکند.
برای نوشتن کد الگوریتم بالا تابع IsPrime را تعریف میکنیم که به کمک آن تعیین کنیم آیا عددی اول است یا خیر. قاعدهی این تابع براساس این است که اگر عددی صحیح بر هیچ یک از اعداد صحیح کوچکتر از خود (تا نصف عدد بررسی شود کافی است) به جز یک بخشپذیر نباشد، عدد اول است:
def even_perfect_number(p):
def IsPrime(n):
if n==2 or n==3:
return True
a=(n//2)+1
for i in range(2,a):
if n%i==0:
return False
return True
#---------------------------
if IsPrime(p)==False:
print("it is not satisfies Mersonne law's")
return
else:
k=2**p-1
if IsPrime(k)==False:
print("it is not satisfies Mersonne law's')
return
else:
result=2**(p-1)*k
return result
جمعبندی:
دنیای اعداد و رابطههای معنی دار میان آنها، ریاضیات را به علمی شیرین و کاربردی تبدیل کرده است. زبان برنامه نویسی پایتون نیز با قواعد دستوری ساده و در عین حال گسترده و قدرتمند خود امکان پیادهسازی بسیاری از قواعد ریاضی را فراهم کرده که منجر به انجام سریعتر محاسبات میشوند. از طرفی تلاش برای نوشتن الگوریتمها و معادلات ریاضی در تفهیم بهتر قواعد این زبان بسیار کمک کننده است. در این مقاله به پیادهسازی سریع و سادهی محاسبهی عدد کامل به طور گام به گام پرداختیم. همچنین یک الگوریتم برای تولید زوج آن ارائه نمودیم.
اگر به یادگیری بیشتر در زمینهی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دورهی آموزش پایتون توسعه وب در آینده میتونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزهی هوش مصنوعی هم شوی.
. برنامه ای بنویسید که از عدد ۱ تا صد هزار تمام اعدادی که دارای عامل مربع اولی هستند را محاسبه و عامل مربع اولی آنها را نیز چاپ کند.
امکانش هست برای بنده حل کنید . بنده حل کردم نمی دونم درسته یا نه . خواهش می کنم
البته ممکنه راه های بهتری داشته باشه اما یه راهش اینه که یک حلقه از 1 تا 100 هزار بگیرید و برای هر عدد:
- کد پیداکردن عامل های اول یک عدد رو بررسی کنید. نتیجه این کد را در یک آرایه بریزید.
- بعد یه حلقه رو این آرایه بزنید که عدد N رو بر مربع اینا تقسیم کنه و اگر باقی مانده صفر بود در آرایه نهایی بریزه. در آخر این آرایه نهایی جواب عامل مربع اولی اون عدد هست و میتونید درجا چاپش کنید.