判断素数真的可以用这种方法吗?

学习编程的同学都知道,判断一个数是不是为素数,假设这个数为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;	 	
}

 
 

发布了8 篇原创文章 · 获赞 8 · 访问量 1079

猜你喜欢

转载自blog.csdn.net/tianxujituan/article/details/52134125