بچه ها سلام.من دانشجوی سال اول کامپیوترم. استاد به ما یه پروژه ای داده و من 2 ساعتع که دارم کار می کنم و چون هنوز تازه واردم نتونستم کاری کنم.:41:لطفا بهم کمک کنید
برنامه ای بنویسید که اعداد اول بین 1 تا 100 را چاپ کند.:13:
Printable View
بچه ها سلام.من دانشجوی سال اول کامپیوترم. استاد به ما یه پروژه ای داده و من 2 ساعتع که دارم کار می کنم و چون هنوز تازه واردم نتونستم کاری کنم.:41:لطفا بهم کمک کنید
برنامه ای بنویسید که اعداد اول بین 1 تا 100 را چاپ کند.:13:
[PHP]
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int i,b,j;
b=0;
for (i=1;i<=100;i++)
{
for (j=1;j<=i;j++)
{
if (i%j==0)
{
b=b+1;
}
}
if(b==2)
{
cout<<i<<endl;
}
b=0;
}
system("PAUSE");
return 0;
}
[/PHP]
خدمت شما دوست عزیز
یک کمی برام توضیح میدی.نقل قول:
البته:
ببینید ما میدونیم هر عدد اولی تعداد مقسوم علیه هاش 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 داره البته چنین چیزی در چنین برنامه ای اصلا مهم نیست ولی گفتنش هم خالی از لطف نیست.کد:#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
for (int i = 1; i <= 100; i++){
for (int j = 2; j <= (i/2); j++){
if (i%j == 0)
break;
else if (j == i/2)
cout << i << "\n";
}
}
system("pause");
return 0;
}