بچه ها سلام.من دانشجوی سال اول کامپیوترم. استاد به ما یه پروژه ای داده و من 2 ساعتع که دارم کار می کنم و چون هنوز تازه واردم نتونستم کاری کنم.لطفا بهم کمک کنید
برنامه ای بنویسید که اعداد اول بین 1 تا 100 را چاپ کند.![]()
بچه ها سلام.من دانشجوی سال اول کامپیوترم. استاد به ما یه پروژه ای داده و من 2 ساعتع که دارم کار می کنم و چون هنوز تازه واردم نتونستم کاری کنم.لطفا بهم کمک کنید
برنامه ای بنویسید که اعداد اول بین 1 تا 100 را چاپ کند.![]()
Last edited by amin.akmali; 28-02-2012 at 19:59.
کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخدمت شما دوست عزیز
یک کمی برام توضیح میدی.
البته:
ببینید ما میدونیم هر عدد اولی تعداد مقسوم علیه هاش 2 باید باشه دیگه.چون بر خودش و 1 بخش پذیره.برا همین اومدیم گفتیم اعداد 1 تا 100 رو بگیره و برای هر کدوم دوباره از یک تا اون عدد رو بگیره و بخش پذیری عدد رو بر اونها(اعداد کوچکتر مساوی خودش) چک کنه(باقیمانده تقسیم بر اونها رو بدست میاره اگه صفر بود یعنی بخش پذیر).اگه بخش پذیر بودش یدونه به متغیر b اضافه کنه.مسلمه هر عددی که b براش بشه 2 یعنی 2 مقسوم علیه داره و حتما اون 2 مقسوم علیه 1 و خودشن.بعد از حساب کردن b برای یه عدد یه شرط گذاشتیم که اگه b 2 میشد اون عددو چاپ کنه.پس ظاهرا درسته ولی فقط یه مشکل داره تا اینجا اونم اینه یه بار برای i ما که 1 باشه که حساب کنه b برابر 1 در میاد.بعد که سراغ 2 میره b همچنان 1 هستش و 2 رو به اشتباه دارای 3 مقسوم علیه نشون میده.(1 مقسوم علیه از 1 مونده 2 تا هم واسه خودش) و به همین ترتیب هی b زیاد میشه و مثلا برای 3 فکر کنم 5 تا مقسوم علیه در نظر گرفته میشه که غلطه پس در نتیجه ما باید کاری کنیم که برای هر i متغیر b رو از صفر در نظر بگیره برای همینم وقتی که خوب کارشو با b کردش برنامه قبل از اتمام حلقه یه b=0 میذاریم و اینطوری وقتی b برای 1 شدش 1 بعد که سراغ 2 میره b دوباره میشه 0 و بعد که سراغ 3 میره(i=3) متغیر b=0 میشه دوباره و الی آخر و مشکل برطرف میشه.پس تو یک جمع بندی کلی:
1)شروع
2)b=0
3) برای i=1 تا 100:
1.3)برای j=1 تا i:
1.1.3)باقیمانده i بر j را حساب کن.اگر باقیمانده صفر بود به b یک واحد اضافه کن.
2.3)اگر b=2بود i را چاپ کن.
3.3)متغیر bرا برابر صفر قرار بده.
4)پایان
P.S:اون % همون طور که میدونید علامت حساب کردن باقیمانده هستش.
P.S2:البته راهای دیگه ایم هست مثلا جای حساب کردن تعداد مقسوم علیه ها میتونیم مجموع مقسوم علیه ها رو به دست بیاریم برا هر عدد چرا که میدونیم اگر a عددی اول باشد مجموع مقسوم علیه هاش a+1 هستش.
یه نکته ای که وجود داره اینه که لازم نیست عمل تقسیم رو روی تمام اعداد تا خود عدد انجام بدید فقط کافی تا عدد "n/2" اینکار انجام بشه.
یعنی مثلا برای آزمایش عدد 19 عمل تقسیم تا عدد 9 انجام بشه کافی هست.
برای مثال کد زیر(البته این کد اعداد 1 تا 3 رو چاپ نمیکنه ولی میتونید این اعداد رو خودتون اضافه کنید):
این کد به مراتب سرعت اجرای بیشتری نسبت به کد دوستمون Arrowtic داره البته چنین چیزی در چنین برنامه ای اصلا مهم نیست ولی گفتنش هم خالی از لطف نیست.کد:برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Last edited by god of war 2; 01-03-2012 at 18:57.
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)