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

2025-03-10 00:58:43
推荐回答(5个)
回答1:

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的话,循环的次数比前面的算法要少得多
如果对此算法有疑问的话
请到网上搜索相关的数学证明

回答2:

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的话,循环的次数比前面的算法要少得多

如果对此算法有疑问的话
请到网上搜索相关的数学证明

回答3:

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);
}

}

回答4:

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

回答5:

问老师吧!