انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: zahra_sh در 06 اسفند 1393، 01:36 قظ
-
سلام میشه بگین این کد رو چجوری بنویسم؟من از ورژن 2.7.5 پایتون استفاده می کنم ممنون میشم اگه زودتر جواب بدید
برنامه ای بنویسید که یک عدد از ورودی بگیرد وتشخیص دهد که آیا می توان آن را به صورت مجموع دو عدد اول نوشت یا نه.در این صورت تمام این حالات رابه ترتیب صعودی اولین عدد چاپ کند و در صورتی که جوابی پیدا نکرد عبارت not found را چاپ کند
مثلا اگر ورودی عدد 34 بود خروجی به صورت زیر باشد:
31+3
29+5
23+11
17+17
-
الان خود مسئله رو حل کردید که باید چه کار کنید؟
تا کجا پیش رفتید و به چه مشکلی برخورد کردید؟
-
انجمنهای پشتیبانی، برای حل مشکلات بهوجود اومدن، نه انجام تکالیف.
اگر میخوای جواب بگیری، باید ابتدا سعی کنی که خودت مساله رو بفهمی، یک جواب براش پیدا کنی، راهحلی که به ذهنت رسید رو اجرا کنی و اگر حل نشد، توی اینجا میگی که سوال چیه، کارهایی که تا الان برای حل کردنش انجام دادی بهتفصیل چی بودن و فکر میکنی کجای کار مشکل داره.
اون موقع دوستانی که علاقه دارن، جوابت رو در کمترین زمان میدن. من اگه احساس کنم هیچ تلاشی برای حل مساله نکردی، تنها کاری که میکنم این که این Tab رو توی مرورگرم میبندم.
-
کد رو نوشتم ولی مشکل اینجاست که وقتی بهش عدد میدم(مثلا همون 34) خروجی این میشه
31 + 3
29 + 5
27 + 7
23 + 11
21 + 13
17 + 17
19 + 15
سومی پنجمی و آخری غلطن نمی دونم مشکل کجاست کدم اینه
m = int(raw_input())
n = 2
while n <= m:
i = 2
no_printed = 0
while i < n:
if n % i == 0:
no_printed = 1
break
i = i + 1
if no_printed == 0:
y=m-n
if y%i!=0 and y>n:
print y,"+",n
if y%i!=0 and n>y:
print n,"+",y
break
if n==y:
print y,"+",n
n = n + 1
-
لطفا کد ها رو تو تگ کد بذارید :)
-
باید چک بکنی که هر دو عدد اول باشند، در حالی فقط یکی از عددها رو چک میکنی.
-
یه پیشنهاد:
اول یه برنامه بنویس که یه لیست نسبتا بزرگ از اعداد اول تولید کنه و توی یه دیتابیس (یا مثلا یه فایل متن) ذخیره کنه. مثلا برای اینکار میتونی از پیاده سازی غربال اراتستن (http://fa.wikipedia.org/wiki/%D8%BA%D8%B1%D8%A8%D8%A7%D9%84_%D8%A7%D8%B1%D8%A7%D8%AA%D9%88%D8%B3%D8%AA%D9%86) استفاده کنی. خوشبختانه توی پایتون حتی مثال هم در این مورد زیاد هست. مثلا این (http://stackoverflow.com/questions/3939660/sieve-of-eratosthenes-finding-primes-python) رو ببین. یا حتی میتونی از لیستهای آمادهی اعداد اول مثل این (http://primes.utm.edu/lists/small/1000.txt) استفاده کنی.
حالا که لیست اعداد اول رو - به یکی از روشهای فوق - داری میتونی خیلی ساده این تشخیص رو انجام بدی. و البته در مورد اعداد زوج میتونی مطمئن باشی که همیشه حداقل دو عدد اول پیدا خواهی کرد (حدس گلدباخ (http://fa.wikipedia.org/wiki/%D8%AD%D8%AF%D8%B3_%DA%AF%D9%84%D8%AF%D8%A8%D8%A7%D8%AE))
-
یه تابع isprime بنویس که اول بودن یا نبودن ورودی رو تشخیص بده. بعد شروع کن اعدادفرد کوچکتر از اون عدد داده شده رو به ترتیب بررسی کن که اول هست یا نه، اگه بود، عدد داده شده رو منهای عدد اولی که داریم بکن و دوباره در تایع isprime بررسی کن که این هم اول هست یا نه. اگه این هم بود، زوج مرتّب حاصله یکی از جوابهای مسألهاست