#include
#include
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之间的整数除即可。这样做可以大大减少循环次数,提高执行效率。
#include
/**
*打印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);
}
}
}
#include
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;这样执行效率更高!
#include
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;
}
望采纳
额,写的太着急,最后一个输出%d之前的双引号忘了写。