در این مقاله شما را با نحوه ی نوشتن برنامه تشخیص عدد کامل در پایتون آشنا خواهیم کرد. عدد کامل یا 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 که عددی اول هم هست، به شکل زیر میباشد:
[caption id="attachment_74658" align="aligncenter" width="374"] برنامه تشخیص عدد کامل در پایتون[/caption]
2p − 1 عدد اول Mersenne نام دارد. عدد اول Mersenne یکی کمتر از مربعات عدد دو است. برای اینکه 2p − 1 اول باشد، لازم است که خود p عدد اولی باشد. به هر حال این یک شرط لازم ولی غیر کافی است. برای مثال p=11 عدد اول است، ولی 211 − 1 = 2047 = 23 × 89 عددی اول نیست. به هر حال مقادیر اعداد اول که در قانون Mersenne صدق کنند، نادر هستند. حال میخواهیم کدی به کمک زبان پایتون بنویسیم که عددی را از کاربر بخواند، اگر آن عدد اول بود و در شرط اعداد اول Mersenne نیز صدق میکرد، عدد کامل متناظر با آن را تولید کند.
الگوریتم کد ما به شرح زیر خواهد بود:
عدد ورودی تابع را در نظر بگیرید.
آیا عدد ورودی اول است؟
اگر نه: اگر نه، چاپ کن ورودی حاصل در قانون Mersonne صدق نمیکند. اگر بله: به مرحله ی بعد برو.
حاصل 2p − 1 را محاسبه کن:
اگر اول بود برو مرحله ی بعد. اگر نه، چاپ کن ورودی حاصل در قانون Mersonne صدق نمیکند.
حاصل 2p−1(2p − 1) را محاسبه کن.
مقدار را در خروجی به عنوان عدد کامل چاپ کن.
برای نوشتن کد الگوریتم بالا تابع 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
بیشتر بخوانید:برنامه ی تشخیص عدد اول در پایتون - چگونه با پایتون برنامه بنویسیم؟ قسمت اول
جمع بندی: دنیای اعداد و رابطههای معنی دار میان آن ها، ریاضیات را به علمی شیرین و کاربردی تبدیل کرده است. زبان برنامه نویسی پایتون نیز با قواعد دستوری ساده و در عین حال گسترده و قدرتمند خود امکان پیاده سازی بسیاری از قواعد ریاضی را فراهم کرده که منجر به انجام سریعتر محاسبات میشوند. از طرفی تلاش برای نوشتن الگوریتمها و معادلات ریاضی در تفهیم بهتر قواعد این زبان بسیار کمک کننده است. در این مقاله به پیاده سازی سریع و ساده ی محاسبه ی عدد کامل به طور گام به گام پرداختیم. همچنین یک الگوریتم برای تولید زوج آن ارائه نمودیم.
اگر به یادگیری بیشتر در زمینه ی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دوره ی آموزش پایتون توسعه وب در آینده میتونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزه ی هوش مصنوعی هم شوی.
سلام اگه بخواهیم یه عدد از کاربر بگیریم و اعداد کامل کوچکتر اط اون عدد را در خروجی چاپ کنیم چطور نوشته میشه؟
نازنین کریمی مقدم۲۳ آبان ۱۴۰۲، ۲۰:۳۸
درود
شما هم میتونید از کامنت پایینی استفاده کنید و فط چون اعداد کامل رو میخواید، شرط بذارید که اگر اول نبود وارد چک کردن کامل بودنش بشه.
۲۰ آذر ۱۴۰۰، ۱۷:۲۱
عدد N را در نظر بگیرید، عددی k را مربع اولي عدد N گوییم به طوریکه اولا عدد k عددی اول باشد دوما عددN بر k2 تقسیم پذیر باشد. مثال : ۲ و ۵ دو مربع اولی عدد ۱۵۰۰ هستند چرا که هم ۲ و ۵ عدد اول هستند هم اینکه اعداد۴ و ۲۵ که مربع ۲ و ۵ هستند بر ۱۵۰۰ بخش پذیر هستند.
. برنامه ای بنویسید که از عدد ۱ تا صد هزار تمام اعدادی که دارای عامل مربع اولی هستند را محاسبه و عامل مربع اولی آنها را نیز چاپ کند.
امکانش هست برای بنده حل کنید . بنده حل کردم نمیدونم درسته یا نه . خواهش میکنم
نازنین کریمی مقدم۲۱ آذر ۱۴۰۰، ۰۶:۰۶
درود
البته ممکنه راههای بهتری داشته باشه اما یه راهش اینه که یک حلقه از 1 تا 100 هزار بگیرید و برای هر عدد:
- <a href="https://www.pythonpool.com/prime-factorization-python/" target="_blank" rel="noopener nofollow ugc">کد پیداکردن عاملهای اول یک عدد</a> رو بررسی کنید. نتیجه این کد را در یک آرایه بریزید.
- بعد یه حلقه رو این آرایه بزنید که عدد N رو بر مربع اینا تقسیم کنه و اگر باقی مانده صفر بود در آرایه نهایی بریزه. در آخر این آرایه نهایی جواب عامل مربع اولی اون عدد هست و میتونید درجا چاپش کنید.
امیر ارشیا۱۸ اسفند ۱۳۹۹، ۱۱:۳۵
توی کدهای آخرتون استرینگها قاطی شده
نازنین کریمی مقدم۲۱ اسفند ۱۳۹۹، ۱۷:۰۴
درود.
بله حق با شماست دابل کوتیشن اضافه شد تا مشکل رفع بشه اما انگار کلا در ویرایشگر فواصل هم به هم ریخته. حتما اصلاحش میکنیم.
ممنون از اطلاع رسانی تون :)
شروع رایگان یادگیری برنامه نویسی
کلیک کنید 👇
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: