PDA

View Full Version : برنامه ای بنویسید که اعداد اول از یک تا صد را تشخیص داده و چاپ نماید؟



saber_h
یک شنبه 30 آذر 1393, 23:45 عصر
برنامه ای بنویسید که اعداد اول از یک تا صد را تشخیص داده و چاپ نماید؟
گیر جواب کجاست

int a,b;
printf("\n adad aval");
printf("\n");
for(a=3;a<100;a++)
for(b=2;b<a;b++)
if (a%b==1)
printf("%-5d",b);

dele514
دوشنبه 01 دی 1393, 01:18 صبح
سلام.
اول اینکه اعداد اول از 2 شروع میشن.(خط 4 (a=3))
دوم اینو هر چی زور زدم نقهمیدم(خط 6 , 7)
سوم اینو ببین فقط نخند چون شهادته.

int a,b;
bool c=false;
printf("\n adad aval");
printf("\n");
for(a=2;a<100;a++)
{
for(b=2;b<a;b++)
{
if (a%b==0)
{
c=true;
break;
}
else
c=false;
}

if(c==false)
printf(a);
}

Ananas
سه شنبه 12 اسفند 1393, 01:26 صبح
سلام.
اول اینکه اعداد اول از 2 شروع میشن.(خط 4 (a=3))
دوم اینو هر چی زور زدم نقهمیدم(خط 6 , 7)
سوم اینو ببین فقط نخند چون شهادته.

int a,b;
bool c=false;
printf("\n adad aval");
printf("\n");
for(a=2;a<100;a++)
{
for(b=2;b<a;b++)
{
if (a%b==0)
{
c=true;
break;
}
else
c=false;
}

if(c==false)
printf(a);
}



سلام.
کد شما درست عمل میکنه ولی بلاک else ای که داخل حلقه هست نیازی نیست که اینهمه اجرا بشه. کافیه قبل از حلقه یکبار مقدار پیش فرض c رو تنظیم کنید. مثلا :

int a,b;
printf("\n adad aval");
printf("\n");
for(a=3;a<100;a++)
{
bool ift = true;
for(b=2;b<a;b++)
{
if (a%b == 0)
{
ift = false;
break;
};
};
if (ift) printf("%-5d",a);
};

و نکته ی دیگه اینکه لازم نیست که تمام اعداد قبل از یک عدد چک بشه تا بفهمیم اول هست یا نه. کافیه به اعداد اول قبل از خودش که کوچکتر و مساویه مجذور اون عدد باشن بخش پذیر نباشه. مثلا برای 25 کافیه که 2 و 3 و 5 رو تست کنیم. مثال :

#define COUNT 1000
int a,b;
bool ift;
int aval[COUNT];
int index = 1;

aval[0] = 2;
a = 2;
while (index < COUNT)
{
ift = true;
int majzoor = (int)sqrt((float)a);
for(b = 0; b < index; b++)
{
if (a % (aval[b]) == 0)
{
ift = false;
break;
};
if (aval[b] > majzoor) break;
};
if (ift) aval[index++] = a;

a++;
};
printf("\n adad aval");
printf("\n");
for (int i = 0; i < index; i++)
{
printf("%-10d", aval[i]);
};

با تنظیم مقدار COUNT میتونید تعداد اولین اعداد اولی که پیدا میکنیم رو مشخص کنیم. دقت کنید که COUNT تعداد اعداد اولمونه! نه محدوده ی اونها. مثلا برای اینکه اعداد اول زیر صد رو پیدا کنیم کافیه که مقدار COUNT رو 25 تنظیم کنیم.
من مقدار COUNT رو به 100000 تغییر دادم. بالافاصله بعد از اجرا همه رو حساب کرد و برای چاپش هم حدودا 5 ثانیه طول کشید. که آخرین عدد چاپ شده 1299709 بود. این روش به شدت سریع تر از روش قبلیه:چشمک:

Fateme.79.19
دوشنبه 05 خرداد 1399, 23:30 عصر
:لبخندساده:سلام خسته نباشید میشه همین سوال رو در محیط #c بگید
با حلقه for و while