判断一个数是否是质数的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/10 10:21:49
自行编写的判断质数的程序如下:

#include <iostream>
#include <cmath>
using namespace std;

void main()
{
int i;
int prime(int i);
cout<<"Ener the number:";
cin>>i;
prime(i);
}

int prime(int i)
{
int j,k;
k=sqrt(i);
for(j=2;j<k;i++);
{
if(i%j==0)
cout<<i<<" 不是质数!"<<endl;
else
cout<<i<<" 是质数!"<<endl;
}
return 0;
}

编译通过,运行时与实际不相符,请问这段程序有什么问题?
其中,k=sqrt(i)这句话是参考书上的源程序,请告诉我,这条语句在判断质数时起什么作用?

你应该在两个cout句后加break;
for(j=2;j<k;i++);
{
if(i%j==0)
{cout<<i<<" 不是质数!"<<endl; break;}
else
{cout<<i<<" 是质数!"<<endl; break;}
}
k=sqrt(i)是因为因数都是关于一个数的平方根两两对称的

for(j=2;j<k;i++); 怎么也是j++吧?

sqrt(k)是根号k。
因为如果你要检查81是不是质数,只要检查到1到9有没有81的约数就可以了,没有必要检查到1到80。

判断是否是质数
假设这个是m
让这个数被2~根号m除
如果不能被2~根号m中任何一个整数整除,就可以确定m是质数
sqrt就是求这个根号m

一楼的没有必要加break,还有for(j=2;j<k;i++);出错,循环的增量出错了,其次我觉得你return 0;是返回的0值,那么就没有必要定义函数是int型,即为 void prime(int i); 相应的可以去掉return 0;
最后,else 后面加上条件判断if(j>k+1)

我感觉在if(i%j==0)后面再写一个判断语句判断j和k的大小,如果j大于k+1就输入这个数作为素数。