求助~ 求素数 代码 问题~~~~~~

来源:百度知道 编辑:UC知道 时间:2024/05/03 03:27:47
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i,j,n,h=0,lead=1;
for(i=2;i<=100;i++)
{
n=sqrt(i+1);
for(j=2;j<=n;j++)
if(i%j==0)
{
lead=0;
break;
}
if(lead)
{
printf("%d ",i);
h++;
if(h%10==0)
printf("\n\n");
}
lead=1;
}
printf("\n\n 100 内总共:%d个素数\n\n",h);
}

以上程序是正确的~
但我有个几个问题~
如果我把它改为
程序改为:

#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{

int i,j,n,h=0,lead=1;
for(i=2;i<=100;i++)
{
n=sqrt(i+1);
for(j=2;j<=n;j++)
if(i%j==0)
{
// lead=0;
break;
}
// if(lead)
else
// if(i%j!=0)
{
printf(&qu

先看看第二个程序:
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{

int i,j,n,h=0,lead=1;
for(i=2;i<=100;i++)
{
n=sqrt(i+1);
for(j=2;j<=n;j++)
if(i%j==0)
{
// lead=0;
break;
}
// if(lead)
else //此处有错,因为一旦上面的i%j!=0(注意是一旦,因为第二个循环还未完成),在下面的语句就会打印出该数(不一定就是素数),而且会多次打印。所以这里加一个标记变量即lead是非常必要的。
// if(i%j!=0)
{
printf("%d ",i);
h++;
if(h%10==0)
printf("\n\n");
}
//lead=1;
}
printf("\n\n 100 内总共:%d个素数\n\n",h);
}

在看第二个
#include<stdio.h>
#include<windows.h>
#include<math.h>
void main()
{
int i,j,n,h=0,lead=1;
for(i=2;i<=100;i++)
{
n=sqrt(i+1);
for(j=2;j<=n;j++) //这个for循环里面的问题很多,也不好修改,建议你还是重新考虑一种算法吧;
if(i%j==0)