C语言100以内所有质数,5个换行,并求和 急用,

如题所述

#include<stdio.h>
#include<math.h>
int main()
{
    int a[25],flag,pos=0,sum=0;//a[25]存放100以内的质数,flag为标志位,若不是质
    //就赋值为0,pos记录a[25]中的下一个存储下标,sum存放质数之和。 
    
    for(int i=2;i!=101;i++)
    {//循环遍历2-100的数,1不是质数 
         flag=1;
         for(int j=0;(j!=pos)&&(a[j]<=floor(sqrt(i)));j++)
         {//根据质数判断定理:“对正整数n,如果用小于或等于根号n的所有质数去除,
         //无法整除,则n为质数” ,pos之前的位置都存放了质数。 
             if(i%a[j]==0)
             {
                 flag=0;
                 break;
             }
         }
         if(flag||!pos)
         {//此处的pos取反,用于第一个质数存入,第一个质数不满足上面的判断 
             a[pos]=i;
             sum+=a[pos];
             ++pos;         
         }
    }
    //显示所有质数 
    for(int i=0;i!=25;i++)
    {
        printf("%d  ",a[i]);
    }
    //打印和 
    printf("\n求得的和为:\n");
    printf("%d\n",sum);
}

结果如图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-04
#include<stdio.h>
int main()
{
int n = 100;
int i,j,sum=0;
int k=0; //换行计数
for(i=2;i<=100;i++)
{
for(j=2;j<=i/2;j++)
{
if(0 == i%j) break;
}
if(j > i/2)
{
printf("%2d ",i);//打印该质数
sum +=i;//求和累加
if(0 == ++k%5) printf("\n");
}
}
printf("\nsum is %d\n",sum);
return 0;
}

本回答被网友采纳
第2个回答  2014-11-04
#include<stdio.h>
int zheshu(int);
int main(void)
{
    int i, j;
    for(i=2,j=0;i<=100;i++){
       if(zheshu(i)!=EOF){
        printf("%d\t", zheshu(i));
        j++;
           if(j%5==0)
            putchar('\n');
       }
    }
    return 0;
}




//判断是否质数
int zheshu(int ai)
{
    int zhi = EOF;
    int i = 2;
    if(ai==2)
        zhi=2;
    else
        for(i=2;i<ai;i++){
            if(ai%i==0){
                zhi=EOF;
                break;
            }
            else
                zhi=ai;
        }
        return zhi;
}

相似回答