c++判断一个数是素数,程序解释

来源:百度知道 编辑:UC知道 时间:2024/06/04 00:50:18
#include <iostream.h>
#include <math.h>

int main()
{
int i;
int n;
int k;
int p;

cout<<"please enter n:"<<endl;
cin >> n;

k=int(sqrt(double(n)));

for (i=2;i<=k;i++)
{

if (n%i==0)
{
p=0;
break;
}
else
{
p=1;
}
}
if (p)
{
cout << "it's a prime"<<endl;
}
else
{
cout << "it isn't a prime"<<endl;
}
return 0;
}

那个if(p)是什么意思,该程序是怎么判断的??

p是一个标识是否是素数的bool
这个算法并不是最高效的。
{ //求3到200间的素数!!!!!
int a,c,i;
for(a=3;a<=200;a=a+2)
{
for(i=2;i<=a/2;i++)
{
c=a%i;
if(c==0)break;
}
if(i>a/2)
printf("%-5d",a);
}

}

只要 一个数 n 能被 1至n的平方根之间的任意一个数整除,那么它就不是素数,即 p = 0

p应该使用的类型是bool 以true和false来作为标记

这里的p用的是int型的 道理其实是一样的
不过仍然推荐使用bool

开始p=0 即false 为假
如果p=1 即为true 为真

k=int(sqrt(double(n)));
for (i=2;i<=k;i++)
关于这个,在数学是有证明的
即一个数从2开始除,如果直到根号下这个数都不能除尽的话
这个数就是素数

在早期计算机编程中
由于硬件性能很差,所有程序的编写的效率十分重要,当然现在也是很有必要的,不过不像以前要求那严格了

比如这个素数的求法
1.按定义的话
求一个数N是否是素数
应当从2开始一直除到N-1
如果N=10000的话,就得循环近10000次
2.所以有人对此进行了改进
即求一个数N是否是素数
从2开始一直除到N/2就可以了
如果N=10000的话,就得循环近5000次
3.有人又做了改进
求一个数N是否是素数
从2开始一直除到sqrt(N),就可以了证明了
如果N=10000的话,循环的次数比前面的算法要少得多

如果对此算法