# Native Code > برنامه نویسی با C > برنامه نویسی با زبان C و ++C >  برنامه ای بنویسید که اعداد اول از یک تا صد را تشخیص داده و چاپ نماید؟

## saber_h

برنامه ای بنویسید که اعداد اول از یک تا صد را تشخیص داده و چاپ نماید؟
گیر جواب کجاست 
    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

سلام.
اول اینکه اعداد اول از 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

> سلام.
> اول اینکه اعداد اول از 2 شروع میشن.(خط 4 (a=*3*))
> دوم اینو هر چی زور زدم نقهمیدم(خط 6 , 7)
> سوم اینو ببین فقط نخند چون شهادته.
> int a,b;      
> bool c=false;     
> printf("\n adad aval");     
> printf("\n");     
> for(a=2;a<100;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

:لبخند: سلام خسته نباشید میشه همین سوال رو در محیط #c بگید
با حلقه for و while

----------

