C语言。质数是只能被一和它本身整除的数。写100-200所有质数的编程~~

如题所述

#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k,m=0;
for(n=101;n<=200;n=n+2) //偶数肯定不是质数
{k=sqrt(n); //见P.S.
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>=k+1)
{printf("%5d",n);
m=m+1; //m用来控制换行,一行内输出10个质数;
}
if(m%10==0) //m累计到10的倍数换行;
printf("\n");
}
printf("\n");
}

P.S.判断一个数是否是质数,不需要被2~(n-1)范围内的各个整数去除,只须将n被2~√n之间的整数除即可。这样做可以大大减少循环次数,提高执行效率。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-26
#include<stdio.h>

/**
*打印100到200质数
*/

void cal(int n1, int n2);

void main()
{
int n1, n2;

n1 = 100;

n2 = 200;

cal(n1, n2);//打印100 ~ 200

}

void cal(int n1, int n2)
{
int i, j;

int flag ;

for(i = n1, i <= n2; i++)

{
flag = 1;//设为质数

for(j = 2; j <= i - 1; j++)

{

if(i % j == 0)
{
flag = 0;//合数flag = 0

break;

}
}
if(flag != 0)

{

printf("%d\n", i);

}

}
}
第2个回答  2013-04-28
#include<stdio.h>
int main()
{
int i,j,flag;

for(i=100;i<=200;i++)

{
flag =1;

for(j=2;j<=i/2;j++)

if(i%j==0) { flag=0;break;}

if(flag) printf("%d ",i);

}
return 0;
}
//第二重for()中条件可以改为j*j<=i;这样执行效率更高!
第3个回答  2013-04-26
#include<stdio.h>
int main()
{
int i,j,flag;

printf("2 ");

for(i=3;i<=200;i++)

{
flag =1;

for(j=2;j*j<=i;j++)

if(i%j==0) { flag=0;break;}

if(flag) printf("%d ",i);

}
return 0;
}

望采纳

第4个回答  2013-04-26
额,写的太着急,最后一个输出%d之前的双引号忘了写。