学习编程的同学都知道,判断一个数是不是为素数,假设这个数为x,最普遍最原始的方法就是枚举2到sqrt(x),判断余数是否为零
代码如下:
#include <iostream>
using namespace std;
int prime(int n);
int prime(int n)
{
int i;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)
return 0;
else
return 1;
}
int main()
{
int m;
cout<<"请输入这个数m=";
cin>>m;
if(prime(m))
cout << m << " 是素数 ";
else cout << m << " 不是素数 ";
return 0;
}
可是对于这段代码,当你输入2或3时 运行结果确是2不是素数,3不是素数,也就是说这段代码是有漏洞的,应该将2,3进行处理,(n<i)的时候应该特别注意。
正确代码如下:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int prime(int x);
int main()
{
int n;
scanf("%d",&n);
if(prime(n)==1) printf("yes");
else printf("no");
return 0;
}
int prime(int x)
{
int i,p;
if(x=2) return 1;
for(i=3;i<=sqrt(x);++i)
if(x%i==0)
break;
if(i>sqrt(x))
return 1;
else
return 0;
}