برنامه‌ی تشخیص عدد اول در پایتون - چگونه با پایتون برنامه بنویسیم؟ قسمت اول

برنامه‌ی تشخیص عدد اول در پایتون:

برنامه‌ نویسی برای همه مهم است زیرا هیچ رایانه‌ و یا هر نوع دستگاه دیجیتالی، بدون برنامه‌ نویسی قادر به کارکردن نیست. افراد علاقمند به برنامه نویسی، هنگامی به توانایی کدنویسی دست می‌یابند، که هم آموزش صحیح دیده و هم پشتکار داشته باشند.

اگر دوست دارید با روش فکر کردن و چگونگی نوشتن یک برنامه‌ی پایتون، بیشتر آشنا شوید، ما را همراهی کنید.

نوشتن برنامه‌ی کاربردی با پایتون:

برنامه‌ای بنویسید که یک عدد صحیح از کاربر بگیرد و در پاسخ اعلام کند که عدد مذکور یک عدد اول است یا خیر؟

برای حل یک مسئله، اول باید بفهمیم که سوال مورد نظر چه چیزی از ما خواسته است. در اینجا ابتدا باید یک عدد صحیح از کاربر بگیریم که با وارد کردن دستور ورودی، آن را انجام می‌دهیم.

در قسمت بعدی، از ما خواسته شده که اول بودن، عدد ورودی را بررسی کنیم. که ما نخست باید بدانیم، عدد اول چیست؟ و سپس برای تشخیص آن، از چه الگوریتمی استفاده کنیم؟

الگوریتم، مجموعه دستورالعمل‌های پشت‌ سر هم و مرتبی است که به رایانه می‌دهیم تا با اجرای به ترتیب آنها، مسائل را حل کند. هر مسئله می‌تواند از طریق چندین الگوریتم، حل شود اما الگوریتمی کاراتر است که بهینه‌ شده و از سرعت بالاتری برخوردار باشد.

عدد اول چیست؟

همان‌طور که می‌دانید به صورت خلاصه، عددی را عدد اول گویند که به جز عدد یک و خودش، به هیچ عدد دیگری بخش‌پذیر نباشد.

اگر هر عدد را بر اعداد کوچک‌تر از خودش تقسیم کنیم و فقط به یک بخش‌پذیر باشد، عدد اول است. برای این امر، از الگوریتم‌های مختلفی می‌توان استفاده کرد که در این مقاله، از سه الگوریتم متفاوت برای پیاده سازی برنامه‌ی تشخیص عدد اول در پایتون استفاده می‌کنیم. تا شما کاربرد الگوریتم در برنامه‌نویسی را بهتر درک کنید.

الگوریتم اول

الگوریتم اول برنامه‌ی تشخیص عدد اول در پایتون به این صورت است:

  1. یک عدد بگیر و در number قرار بده.
  2. یک جمع‌کننده‌ی تعداد مقسوم‌علیه‌ها به نام accumulator انتخاب کن و 0 را در آن قرار بده.
  3. یک شمارنده به نام i را انتخاب کن و 1 را در آن قرار بده.
  4. اگر باقیمانده‌ی تقسیم number بر i مساوی 0 باشد، یک واحد به مقدار accumulator اضافه کن.
  5. یک واحد به مقدار i اضافه کن.
  6. اگر مقدار i کوچکتر مساوی number است، به گام 4 برگرد.
  7. اگر مقدار accumulator مساوی 2 است، پیغام “عدد شما، عدد اول است” را چاپ کن و به گام 10 برو.
  8. پیغام “عدد شما، عدد اول نیست” را چاپ کن.
  9. به اجرای الگوریتم خاتمه بده.

نوشتن کد:

ابتدا یک عدد را از کاربر می‌گیریم. برای گرفتن ورودی از کاربر، از دستور input() و برای تبدیل رشته به عدد صحیح از دستور int() استفاده می‌کنیم. عدد ورودی را در متغیر number قرار می‌دهیم. به این صورت:

number =int(input('please input your number: '))

اکنون متغیر accumulator که جمع‌کننده‌ی تعداد مقسوم‌علیه‌ها است، را تعریف می‌کنیم و عدد 0 را به آن اختصاص می‌دهیم. به این صورت:

accumulator = 0

برای تقسیم عدد ورودی بر اعداد کوچک‌تر مساوی خودش، از یک حلقه‌ی تکرار for استفاده می‌کنیم. از آنجا که قصد داریم خود متغیر number نیز در حلقه باشد، یک را به آن اضافه می‌کنیم.

در حلقه، اگر باقیمانده‌ی تقسیم ورودی بر عدد جاری حلقه، برابر صفر بود یکی به متغیر accumulator اضافه می‌کنیم. به این صورت:

for i in range(1, number+1):
    if number % i == 0:
        accumulator +=1

وقتی حلقه‌ی ما به پایان می‌رسد، باید مقدار متغیر accumulator را بررسی کنیم. اگر مساوی 2 بود، پیغام “عدد اول است” و در غیر این‌صورت پیغام ” عدد اول نیست” را چاپ می‌کنیم. برای این کار از دستور if-else استفاده می‌کنیم. به این صورت:

if accumulator == 2:
    print('your number is prime')  
else:
    print('your number is not prime')

ما به راحتی توانستیم با این الگوریتم ساده، برنامه‌ی پایتون تشخیص عدد اول را بنویسیم. کد این برنامه را می‌توانید در زیر ببینید.

number = int(input('please input your number: '))
accumulator = 0
for i in range(1, number+1):
    if number%i == 0:
        accumulator+=1
if accumulator==2:
    print('your number is prime')
else:
    print('your number is not prime')

الگوریتم دوم:

در الگوریتم اول با استفاده از یک جمع‌کننده‌ی تعداد مقسوم‌علیه‌ها توانستیم برنامه‌ای بنویسیم که عدد اول را تشخیص دهد. اکنون می‌خواهیم از الگوریتمی استفاده کنیم که برای پیاده سازی برنامه‌ی تشخیص عدد اول در پایتون، نیاز به جمع‌کننده‌ی تعداد مقسوم‌علیه‌ها ندارد.

  1. یک عدد بگیر و در number قرار بده.
  2. اگر number کوچک‌تر مساوی یک است، پیغام “عدد شما، عدد اول نیست” را چاپ کن و به گام 8 برو.
  3. یک شمارنده به نام i انتخاب کن و مقدار 2 را در آن قرار بده.
  4. اگر باقیمانده‌ی تقسیم number بر i مساوی 0 است، پیغام “عدد شما، عدد اول نیست” را چاپ کن و به گام 8 برو.
  5. یک واحد به مقدار i اضافه کن.
  6. اگر مقدار i کوچکتر از number / 2 است، به گام 4 برگرد.
  7. پیغام “عدد شما، عدد اول است” را چاپ کن.
  8. به اجرای کد خاتمه بده.

نوشتن کد:

مانند کد قبلی، ابتدا از کاربر یک عدد صحیح می‌گیریم و در متغیر number ذخیره می‌کنیم. به این صورت:

number = int( input('please input your number: '))

با استفاده از دستور شرطی if-else، اگر عدد ورودی بزرگ‌تر از یک باشد، برای بررسی به بلوک if هدایت می‌شود. و اگر عدد یک باشد در بلوک else پیغام “عدد شما، عدد اول نیست” چاپ می‌شود. به این صورت:

if number > 1:
    pass
else:
    print('your number is not prime')

اکنون به سراغ نوشتن کدهای بلوک if می‌رویم. طبق الگوریتم ما باید عدد ورودی را بر اعداد 2 تا نصف خودش، برای بخش‌پذیر بودن بررسی کنیم. پس یک حلقه‌ی تکرار for با دامنه‌ی اعداد از 2 تا عدد ورودی تقسیم بر 2 می‌نویسیم. به این صورت:

for i in range(2 , number // 2):

نکته: از آنجا که الگوریتم خوب، باید بهینه شده باشد، ما عدد ورودی را تا نصف خودش بررسی می‌کنیم. زیرا هر عدد اگر تا نصف خودش بر عددی بخش‌پذیر نباشد، بر اعداد بزرگتر از نصفش نیز، بخش‌پذیر نیست.

در حلقه، اگر باقیمانده‌ی تقسیم عدد ورودی بر i مساوی صفر بود، پیغام ” عدد اول نیست” را چاپ می‌کنیم. سپس با استفاده از دستور break برنامه را به پایان می‌رسانیم. به این صورت:

if number % i == 0:
    print('your number is not prime')
    break

نکته: چون عدد یک و number در حلقه نیستند، اگر number بر هر عددی بخش‌پذیر باشد، آن عدد، اول نیست.

پله‌ی آخر:

اما اگر حلقه‌ی for بدون هیچ اتفاقی به پایان برسد، در یک else پیغام “عدد اول است” را چاپ می‌کند. به این صورت:

else:
    print('your number is prime')  

اشکال‌زدایی کد:

در این الگوریتم، به دلیل آن که عدد ورودی را بر 2 تقسیم می‌کنیم، هنگام وارد کردن عدد 4، آن تبدیل به عدد 2 شده و به اشتباه یک عدد اول شناخته می‌شود. برای رفع این مشکل، قبل از حلقه For یک شرط می‌نویسیم تا عدد 4 وارد حلقه نشود. به این صورت:

...
if number > 1:
    if number == 4:
        print('your number is not prime') 
    else: 
        for i in range(2 , number//2):
 ...

راه‌حل ساده‌تری نیز وجود دارد، به این صورت که در if اول، یک شرط به صورت and اضافه شود، که عدد ورودی مساوی 4 نباشد. در کد کامل شده ما، می‌توانید این مورد را مشاهده کنید.

به این طریق ما به کمک الگوریتمی دیگر توانستیم برنامه‌ی پایتون تشخیص عدد اول را بنویسیم. کد این برنامه به این صورت است:

number = int(input('please input your number: '))
if number > 1 and number != 4:
    for i in range(2 , number//2):
        if number % i == 0:
            print('your number is not prime')
            break
    else:
        print('your number is prime')  
else:
    print('your number is not prime')

نکته‌ی حائز اهمیت، این است که الگوریتم دوم به دلیل بررسی number/2، بهینه‌تر و از سرعت بالاتری برخوردار است. پس برای نوشتن برنامه‌هایتان، الگوریتمی استفاده کنید که بهینه‌‌شده باشد، زیرا سرعت اجرای برنامه‌ بیشتر و حافظه کمتری اشغال می‌کند. در الگوریتم بعدی، کد ما بهینه‌تر خواهد شد.

الگوریتم سوم:

در الگوریتم سوم برنامه‌ی تشخیص عدد اول در پایتون قصد داریم از الگوریتمی استفاده کنیم که خیلی بهینه‌شده‌تر و سریع‌تر است. در این الگوریتم به جای آن که تا عدد ورودی بررسی شود، تا جذر عدد ورودی بررسی خواهد شد.

  1. یک عدد بگیر و در number قرار بده.
  2. اگر number کوچک‌تر مساوی 1 است، پیغام “عدد شما، عدد اول نیست” را چاپ کن و به گام 10 برو.
  3. اگر number کوچک‌تر مساوی 3 است، پیغام “عدد شما، عدد اول است” را چاپ کن و به گام 10 برو.
  4. اگر باقیمانده‌ی تقسیم number بر 2 یا باقیمانده‌ی تقسیم number بر 3 مساوی 0 است، پیغام “عدد شما، اول نیست” را چاپ کن و به گام 10 برو.
  5. یک شمارنده به نام i انتخاب کن و عدد 5 را در آن قرار بده.
  6. اگر باقیمانده‌ی تقسیم number بر i یا باقیمانده‌ی تقسیم number بر i+2 مساوی 0 است، پیغام “عدد شما، عدد اول نیست را چاپ کن و به گام 10 برو.
  7. مقدار 6 را به i اضافه کن.
  8. اگر i*i کوچکتر مساوی number است، به گام 6 برگرد.
  9. پیغام “عدد شما، عدد اول است” را چاپ کن.
  10. به اجرای الگوریتم خاتمه بده.

نوشتن کد:

طبق موارد قبلی، ابتدا یک ورودی از کاربر می‌گیریم. به این صورت:

number = int( input('please input your number: '))

براساس الگوریتم، برای آن که برنامه در هر گام به پایان برسد، آن را در حلقه‌ای نوشته که یک‌دور می‌زند. پس ما از یک حلقه‌ی while استفاده می‌کنیم و یک متغیر boolean به نام active با مقدار True تعریف می‌کنیم. به این صورت:

active = True
while active:
    pass

در داخل حلقه، با شرط اول، اگر number کوچک‌تر مساوی یک باشد، پیغام “عدد اول نیست” چاپ می‌شود. سپس با دستور break از برنامه خارج می‌شود. به این صورت:

if  number <= 1  : 
    print('your number is not prime')
    break

با عدم برقراری شرط اول، با شرط دوم، اگر number کوچک‌تر مساوی 3 باشد، پیغام “عدد اول است” چاپ می‌شود. سپس با دستور break از برنامه خارج می‌شود. به این صورت:

if  number <= 3   :
    print('your number is prime')  
    break

با برقرار نبودن شرط دوم، به سراغ نوشتن شرط سوم می‌رویم. اگر باقیمانده‌ی تقسیم‌های number بر 2 یا number بر 3، مساوی 0 باشد، پیغام “عدد اول نیست” چاپ می‌شود. سپس با دستور break از برنامه خارج می‌شود. به این صورت:

if  number % 2 == 0 or number % 3 == 0  : 
    print('your number is not prime')
    break

اکنون به گام 5 الگوریتم می‌رسیم، یک متغیر به نام i تعریف کرده و 5 را به آن اختصاص می‌دهیم. سپس یک حلقه‌ی while می‌نویسیم که تا شرط i*i کوچک‌تر مساوی number باشد، ادامه پیدا می‌کند. به این صورت:

i = 5
while i * i <= number :
    pass

در حلقه، اگر باقیمانده‌ی تقسیم‌های number بر i یا number بر i+2، مساوی 0 باشد، پیغام “عدد اول نیست” را چاپ می‌کند. سپس با دستور break از برنامه خارج می‌شود، در غیر این صورت مقدار 6 را به i اضافه می‌کند. به این صورت:

i = 5
while i * i <= number:
    if  number % i == 0 or number % (i + 2) == 0  :
        print('your number is not prime')
        break
    i = i + 6

پله‌ی آخر:

 اکنون برای آن که حلقه‌ی while اولی به پایان برسد، مقدار متغیر active را به False تغییر می‌دهیم. سپس پیغام “عدد شما، یک عدد اول است” را چاپ می‌کنیم. به این صورت:

active = False
print('your number is prime')  

به این ترتیب،  ما با یک الگوریتم سریع و بهینه، موفق به نوشتن یک برنامه پایتون تشخیص عدد اول شدیم. کد کامل این الگوریتم را در زیر ببینید.

number = int(input('please input your number: '))
active = True
while active:
    if number <= 1: 
        print('your number is not prime')
        break
    if number <= 3: 
        print('your number is prime')  
        break
    if number % 2 == 0 or number % 3 == 0: 
        print('your number is not prime')
        break
    i = 5
    while i * i <= number: 
        if number % i == 0 or number % (i + 2) == 0: 
            print('your number is not prime')
            break
        i = i + 6
    active = False
    print('your number is prime')  

نوشتن تابع تشخیص عدد اول:

برای نوشتن یک تابع برای تشخیص اول بودن اعداد، می‌توانیم از هر سه الگوریتم بالا استفاده کنیم. اما ما ترجیح می‌دهیم از الگوریتم سوم استفاده کنیم زیرا بهینه‌تر است.

توضیحات کافی در خصوص هر سه الگوریتم‌ در برنامه‌نویسی دادیم. فقط لازم است بدانید، خروجی تابع ما یک boolean است. اگر عدد ورودی، اول باشد، خروجی True و اگر عدد اول نباشد، خروجی False خواهد بود. کد تابع ما به این صورت خواهد بود:

def isPrime(n) : 
    if (n <= 1) : 
        return False
    if (n <= 3) : 
        return True
    if (n % 2 == 0 or n % 3 == 0) : 
        return False
    i = 5
    while (i * i <= n) : 
        if (n % i == 0 or n % (i + 2) == 0) : 
            return False
        i = i + 6
    return True
# ==================== end of function
number = int( input('please input your number: '))
if isPrime(number) : 
    print('your number is prime')  
else : 
    print('your number is not prime')  

جمع‌بندی

با نوشتن یک برنامه‌ی کاربردی پایتون، با سه الگوریتم و روش مختلف به شما نشان دادیم که یک برنامه‌ نویس، چگونه باید تفکر الگوریتمی داشته باشد و چگونه یک الگوریتم را به کد تبدیل کند. تمامی الگوریتم‌ها در مقادیر کوچک، مشکل سرعت نخواهند داشت و این محاسبه اعداد بزرگ است که نشان می‌دهد آیا یک الگوریتم و برنامه‌ی پایتون بهینه‌شده است یا خیر؟ لذا شما در حین اینکه برنامه‌نویسی می‌آموزید، به سراغ یادگیری الگوریتم‌ها نیز بروید تا توانایی بهینه‌سازی برنامه‌هایتان را داشته باشید.

در قسمت بعدی این مجموعه مقالات نوشتن برنامه‌ی مقلوب یک عدد در پایتون، را به شما آموزش خواهیم داد. با ما همراه باشید.

اگر به یادگیری بیشتر در زمینه‌ی برنامه نویسی پایتون علاقه داری، یادگیری زبان پایتون بسیار ساده است. و با شرکت در دوره‌ی آموزش پایتون توسعه وب در آینده می‌تونی اپلیکیشن موبایل و دسکتاپ بسازی و وارد حوزه‌ی هوش مصنوعی هم شوی.

فرصت های بزرگ و درآمدهای عالی متعلق به متخصص هاست. برای متخصص شدن، مشاوره رایگان بگیر:

 
ارسال دیدگاه
ما همه سوالات و دیدگاه ها رو می خونیم و پاسخ میدیم
۴۷ دیدگاه
۰۳ آذر ۱۴۰۱، ۰۹:۴۶
سلام . ببخشید ایا الگوریتمی وجود دارد که ورودی نداشته نباشد ؟ اگه وجود دارد میشه یک مثال بزنید .
نازنین کریمی مقدم ۰۶ آذر ۱۴۰۱، ۰۰:۴۷
درود
اغلب الگوریتمها ورودی دارند اما بله امکانش هست.
فرض کنید که سوال این باشه که دنباله اعداد اول یا اعداد زوج یا فیبوناچی و... رو چاپ کنید. اینجا ورودی ندارید و خودتون از یک شروع میکنید و پیش میرید.
۱۸ آبان ۱۴۰۱، ۲۲:۴۴
سلام
اگر بخواییم برنامه ای بنویسیم که ،عددی وارد کنیم و تعداد اعداد اول قبلشو بهمون بگه چجوری باید نوشت؟
نازنین کریمی مقدم ۲۰ آبان ۱۴۰۱، ۱۷:۵۸
درود
عدد وارد شده رو در یک متغیر بریزید.
کافیه یک حلقه بنویسید که از 1 تا اون متغیر تکرار میشه.
در بدنه حلقه هم کافیه یکی از الگوریتمهای بالا رو بذارید و هروقت عدد اولی رو تشخیص داد، به تعداد یکی اضافه کنه.
درنهایت تعداد رو چاپ میکنید.
۰۹ آبان ۱۴۰۱، ۱۹:۱۲
من 13 سالمه و همینو خیلی ساده اینطوری حل کردم
adad=int(input(&quot;adad?&quot;))
aadad=[]
for i in range(1,adad+1):
if adad%i==0:
aadad.append(i)
print(&#39;inAdadBar&#39;,aadad,&#39;bakhshPazirAsr!!&#39;)
if len(aadad)==2:
print(&quot;adadAvalAst&quot;)
else :
print(&quot;adadMorakabAst&quot;)
۲۱ شهریور ۱۴۰۱، ۱۷:۲۹
سلام ممنون میشم پاسخ بدین🙏
برنامه ای بنویسید که ابتدا اعضای یک لیست را خوانده سپس از طریق نمایش یک منو و انتخاب گزینه ای توسط کاربر اعمال زیر را انجام دهد
۱)عضوی را به لیست اضافه میکند
۲)عضوی را در مکان خاص از لیست درج میکند
۳)اعضای لیست را مرتب میکند
۴)عضوی را از لیست حذف کند
۵)تعداد تکرار مقادیر را در لیست شمارش کند
۶)مکان یک مقدار را در لیست پیدا کند
۷) خروج
نازنین کریمی مقدم ۲۲ شهریور ۱۴۰۱، ۱۲:۵۱
درود
بحث لیست رو از سایت w3schools پیش برید خوب توضیح داده.
۲۸ مرداد ۱۴۰۱، ۱۸:۳۳
روش نوشتن کد این چجوریه
تعداد اعداد اول زیر ۱۰۰۰
نازنین کریمی مقدم ۲۹ مرداد ۱۴۰۱، ۱۱:۴۰
درود
کافیه یک حلقه بنویسید که از 1 تا هزار تکرار میشه.
در بدنه حلقه هم کافیه یکی از الگوریتمهای بالا رو بذارید و هروقت عدد اولی رو تشخیص داد، به تعداد یکی اضافه کنه.
درنهایت تعداد رو چاپ میکنید.
علیرضا دهنوی ۲۵ مرداد ۱۴۰۱، ۱۱:۵۹
سلام وقت بخیر اگر عددی بگیریم و بخواییم کوچکترین عدداولی که تعداد رقم هاش با عدد ورودی یکیه بنویسید
نازنین کریمی مقدم ۲۶ مرداد ۱۴۰۱، ۰۹:۱۴
درود
باید اول براساس تعداد ارقام یک شرط بگذاریم که اگر مثلا سه رقمی بود از 100، اگر دو رقمی بود از 10 و... شروع کنه.
بعد در یک حلقه اعداد رو چک کنه تا به عدد اول برسه و اون رو چاپ کنه.
۲۳ مرداد ۱۴۰۱، ۱۶:۰۰
اگر بخوایم برنامه n عدد مشخص از کاربر بگیره و تعداد اعداد اولشون رو مشخص کنه ،چه جوری میشه این برنامه؟
نازنین کریمی مقدم ۲۴ مرداد ۱۴۰۱، ۰۹:۵۹
درود
کافیه تعداد عدد مشخص رو از کاربر بگیرید و در یک متغیر بریزید، بعد یک حلقه بنویسید که شمارنده اش همون متغیری هست که درنظر گرفتید.
در بدنه حلقه هم کافیه یکی از الگوریتمهای بالا رو بذارید.
۰۹ مرداد ۱۴۰۱، ۱۳:۰۷
روش سوم برای عدد 96998989 دچار باگ می شود ---- روش دوم خطای کمتری دارد
۰۳ مرداد ۱۴۰۱، ۰۱:۰۸
سلام میشه یه توضیحی در مورد for وrenge بدید و همچنین ارتباتشون
نازنین کریمی مقدم ۰۳ مرداد ۱۴۰۱، ۰۸:۴۳
درود
حلقه for یک کار رو به تعداد مشخصی تکرار میکنه. یعنی مثلا در کد زیر عبارت سلام 10 بار اجرا میشه.

for n in range(10):
print("سلام")

تابع range یک بازه از اعداد رو تولید میکنه که در مثال بالا 0 تا 10 هست.
پیشنهاد میکنم به بخش شروع برنامه نویسی سر بزنید.
۱۴ تیر ۱۴۰۱، ۱۳:۳۷
وقت بخیر
در برنامه تشخیص عدد اول

هرزمان که سیستم عدد اول را تشخیص می‌دهد از برنامه خارج می‌شود.
به عبارتی چطور می‌توان کدی داد که تا زمانی که متلا x را اعلام نکردم، دوباره سیستم از ما ورودی بخواهد
نازنین کریمی مقدم ۱۸ تیر ۱۴۰۱، ۱۱:۲۸
درود
باید کل الگوریتم رو درون یک حلقه while بنویسید تا طبق شرط شما دائم اجرا بشه.
۱۹ خرداد ۱۴۰۱، ۲۳:۳۷
سلام اگه بگن تا زمانیکه کاربر عدد مثبت وارد میکند اعدار زوج کوچیکتر از آن را در خروجی نمایش بدهید این سوال چطور میشه حل کرد؟
نازنین کریمی مقدم ۲۰ خرداد ۱۴۰۱، ۰۴:۴۶
درود
مراحل به این ترتیب هست:
۱. گرفتن ورودی و ذخیره در یک متغیر
۲. چک کردن اینکه مثبت هست یا نه.
۳. اگر مثبت بود در یک حلقه از یک تا اون عدد رو چاپ کنه. درغیر این صورت برنامه تموم بشه.
۴. برای اینکه تا زمانی که کاربر عدد مثبت وارد کرد این روند ادامه پیدا کنه، بهتره مراحل ۲ و ۳ داخل یک تابع نوشته بشه و به ازای هر ورودی فراخوانی بشه.
۰۹ اردیبهشت ۱۴۰۱، ۲۰:۳۳
عالیییی بود🧡🧡✔👌
۲۰ اسفند ۱۴۰۰، ۱۱:۲۴
سلام. الگوریتم سوم پیچیدگی زمانی کمتری نسبت به الگوریتمی که برای اعداد بزرگتر از یک، بخش پذیری از 2 تا مجذور +1 بررسی می کنه، داره؟!
نازنین کریمی مقدم ۲۱ اسفند ۱۴۰۰، ۱۵:۱۱
درود
الگوریتم سوم عملا داره تا n/2 رو بررسی میکنه و نسبت به سایرین که تا n بررسی میکنند کمی بهینه تر هست، وگرنه از لحاظ تعریفی مرتبه اش همچنان مشابه با سایرین میشه.
۱۵ بهمن ۱۴۰۰، ۱۳:۴۶

اگه بخواهیم این اعداد رو با وایل خالی تشخیص بدیم چجوری میشه
نازنین کریمی مقدم ۱۶ بهمن ۱۴۰۰، ۱۲:۵۶
درود
کافیه در الگوریتم اول بجای خطی که for داره، جمله while رو قرار بدید.
۲۸ دی ۱۴۰۰، ۱۵:۳۲
زیبا بود
۰۸ دی ۱۴۰۰، ۱۶:۰۲
برنامتون عالیه حق مطلب رو کاملا میرسونه ممنون از شما
۰۳ دی ۱۴۰۰، ۲۱:۳۰
سلام چطوری میتونم اعداد اول در یک حلقه رو بیابم ؟

نازنین کریمی مقدم ۰۴ دی ۱۴۰۰، ۱۰:۰۰
درود
منظورتون اینه که اعداد اول یک بازه رو تشخیص بدیم،
یا منظورتون اینه که تو الگوریتمش حتما از یک حلقه استفاده بشه؟
۱۹ آذر ۱۴۰۰، ۲۳:۵۴
مثلا بگن برنامه ای بنویسی که اعداد صحیح بین 10000تا100000را بیابید باید چطوری بنویسیم اون برنامه رو؟؟
نازنین کریمی مقدم ۲۰ آذر ۱۴۰۰، ۰۹:۱۷
سلام
برای این کار کافیه از حلقه استفاده کنید:
for i in range(10000,100001):
print(i)
ali ۱۰ آذر ۱۴۰۰، ۲۰:۰۵
ممنون از شما
جالبته وقتی عدد 25 به برنامه میدی
خروجی هم Prime پرینت میشه و هم not prime اما برای اعداد دیگر اینجور نیست!!!!
Nazanin KarimiMoghaddam ۱۳ آذر ۱۴۰۰، ۰۹:۵۴
درود
کدوم الگوریتم تون اینطوری هست؟ چون من الگوریتم آخر رو تست میکنم چنین مشکلی نداره
۲۳ آذر ۱۴۰۰، ۰۸:۵۵
کد بالای کد آخر اون که فانکشن نیست!
number = int(input(&#39;please input your number: &#39;))
active = True
while active:
if number &lt;= 1:
print(&#39;your number is not prime&#39;)
break
if number &lt;= 3:
print(&#39;your number is prime&#39;)
break
if number % 2 == 0 or number % 3 == 0:
print(&#39;your number is not prime&#39;)
break
i = 5
while i * i &lt;= number:
if number % i == 0 or number % (i + 2) == 0:
print(&#39;your number is not prime&#39;)
break
i = i + 6
active = False
print(&#39;your number is prime&#39;)
مهدی ۰۱ آذر ۱۴۰۰، ۱۸:۲۹
سلام لطفا تشخیص عدد اول به روش حلقه های تودرتو بذارید
Nazanin KarimiMoghaddam ۰۳ آذر ۱۴۰۰، ۰۹:۳۶
درود
برای اینکه دوباره کاری نشه، بی زحمت پاسخ تیک خورده از این لینک رو مطالعه کنید. جواب سوالتون رو کامل میده.
بهراد تاجیک ۲۲ آبان ۱۴۰۰، ۱۳:۵۹
سلام خسته نباشید.
میتونید بگید ما همین اول بودن یا نبودن رو چه جوری میتونیم با تابع بازگشتی بنویسیم؟
Nazanin KarimiMoghaddam ۲۲ آبان ۱۴۰۰، ۱۴:۱۴
درود
پاسخهای این لینک استک رو ببینید جوابتون رو به طور کامل میگیرید.
فربد ۲۵ مهر ۱۴۰۰، ۱۳:۴۴
سلام
یک مشکلی هست اونم اینه که عدد 1 رو میدیم میگه اول نیست و اگه میشه این مشکل رو بر طرف کنید.
نازنین کریمی مقدم ۲۶ مهر ۱۴۰۰، ۰۳:۳۸
درود
برای اینه که عدد یک اول نیست واقعا، در ریاضیات کوچکترین عدد اول 2 هست.
pouriya ۲۳ بهمن ۱۳۹۹، ۲۱:۲۵
الگوریتم دوم باگ داره
4 رو بهش میدی پرایم میاره
من دیباگش کردم الان درستش اینه:


[code]

number = int(input(''))

while number % 2 == 0:
if number % 2 == 0:
print ('not prime')
break
else:
if number > 1:
for i in range(2 , number//2):
if number % i == 0:
print('not prime')
break
else:
print('prime')

else:
print('not prime')
[/code]
عبدالرضا مولایی ۲۶ بهمن ۱۳۹۹، ۱۰:۰۵
سلام دوست عزیز،
خوشحالیم که با دقت آموزش‌های ما را دنبال می‌کنید. در الگوریتم دوم به دلیل اینکه ما عدد ورودی را بر 2 تقسیم می‌کنیم، عدد 4 تبدیل به 2 شده و به اشتباه آن را یک عدد اول تشخیص می‌دهد. برای جلوگیری از این مشکل برای اولین راه حل کافی است یک شرط قبل از حلقه‌ی for نوشته تا عدد 4 وارد حلقه نشود. به این طریق باگ موجود بر طرف میشود. البته یک راه حل ساده تر نیز وجود دارد که در متن اصلی قرار دادم. راه حل اول به این صورت است:
[code]
if number == 4:
print('your number is not prime')
else:
for i in range(2 , number//2):
[/code]
میثم نصرتی آذر ۲۵ آبان ۱۳۹۹، ۱۳:۴۱
با سلام
ببخشید راستش من این الگوریتم سوم رو مخصوصا اونجا که i = i + 6 کرده رو متوجه نشدم ، امکانش هست بیشتر توضیح بدید؟
عبدالرضا مولایی ۲۶ آبان ۱۳۹۹، ۱۰:۳۶
سلام دوست عزیز،
در این الگوریتم به جای اینکه عدد مورد نظر را بر تمامی اعداد قبل خودش تقسیم کنیم، ابتدا آن را بر 2 و 3 تقسیم می کنیم اگر بخش پذیر بود خیلی راحت متوجه می‌شویم که عدد اول نیست و اگر بخش‌پذیر نبود آن بر اعداد 5 و 7 تقسیم می کنیم و باز اگر بخش پذیر بود عدد ما اول نیست و در غیر این صورت i خود را که 5 باشد با 6 جمع می کنیم (i = i+6) و دوباره مرحله قبل را که بر 5 و 7 بود را این مرتبه با 11 و 13 امتحان می کنیم.. و این کار را ادامه می دهیم تا وقتی که i*i بزرگتر مساوی عدد مورد نظرمان شود. اگر هیچکدام از این شرایط برقرار نشد پیغام عدد ما اول است را چاپ می کنیم. امیدوارم الان بهتر متوجه شده باشید.
harez ۰۶ مرداد ۱۳۹۹، ۱۶:۰۷
الگوریتم دوم باگ داره
4 رو بدی بهش prime میده
J.m ۰۶ اردیبهشت ۱۳۹۹، ۰۹:۵۷
سلام , اقا زحمت کشیدید , ولی بهتر نبود کد هاتون رو اول تست میکردید بعد مینوشتید . چون خیلی اشتباه نوشته شده , مثلا در الگوریتم دوم که در اخر که کد ها رو کامل نوشتید ایندنت else زیر for نوشته شده , باید زیر if باشد . اشکال دیگر اینکه جلوی کلمه break پرانتز گذاشتید!!
عبدالرضا مولایی ۰۶ اردیبهشت ۱۳۹۹، ۱۴:۲۷
سلام دوست عزیز، تمامی کدها تست شده است.. درمورد else در for این از ویژگی‌های زبان پایتون است اگر قصد آشنایی بیشتر در این مورد را دارید از این لینک استفاده کنید:
https://book.pythontips.com/en/latest/for_-_else.html
درمورد پرانتز در break نیز در یک مورد، اشتباه تایپی رخ داده. ممنون از اینکه اطلاع دادید.
اشتراک گذاری مقاله در :
  • نوشتن برنامه‌ی کاربردی با پایتون:
  • نوشتن تابع تشخیص عدد اول: