关于C++求素数的问题,在线等,回答的详细的加分~

来源:百度知道 编辑:UC知道 时间:2024/06/07 08:09:26
#include <iostream.h>
#include <math.h>
#define MIX 51
#define MAX 100
void main ()
{
int i,j,k;
for (i=MIN;i<=MAX;i+=2)
{
k=int (sqrt(double(i));
for (j=2;j<=k;j++)
if(i%j==0)
break;
if(j>=k+1)
cout<<' '<<i;
}
cout<<endl;
}

这是用来求51~100之间的素数的代码。但是我有几个问题想不通。希望有人能详细的帮下我,谢谢!
第一,为什么要用#define MIN来控制起始点,能不能i那里赋值呀。i=51;i<=100;
第二,k= int (sqrt (double (i));这句有什么作用啊,为什么要写这一句;
第三,if(j>-k+1)有什么作用啊;
谢谢~能详细的回答,我加分啊~
斯诺,第三条为什么要用要写成if(j>=k+1)啊,写别的就不行吗?

第一,为什么要用#define MIN来控制起始点,能不能i那里赋值呀。i=51;i<=100;
---------完全可以。因人所好
第二,k= int (sqrt (double (i));这句有什么作用啊,为什么要写这一句;
---------数学可以证明,如果一个数从2开始,一直到它本身的开方,每个数都除不尽,那么它就是素数。
第三,if(j>-k+1)有什么作用啊
---------当j==k+1时,退出循环,然后判断j是否大于等于k+1,如果是,那就意味着并不是break出来的(break出来的j不可能大于等于k+1),而是正常退出循环的,这样就输出i。

#define MIX 51
#define MAX 100

这两个可以写在main()里面
int MIX = 51,MAX=100;

其他的。。。。。。

这是我用c写的求前100个质数的代码
//初始化数组,第一个为2
//从3开始计算,如果是质数则增量i+1,然后跳到下一个数
//如果不是,跳到下一个数,继续计算
void main()
{
int i=1,j=3,k=0,zhishu[100];
zhishu[0]=2;
while(i<=100)
{
while(1)
{
if(j%zhishu[k]!=0)//如果是质数
{
k++;
if(k==i) {zhishu[i]=j;k=0;j++;i++;break;}
}
else {k=0;j++;break;}
}
}
i=0;
while(i<100)
{
printf("%d ",zhishu[i]);
if(i>0 && i%10==0) printf("\n");
i++