C++判断一个数是否是质数(极简版)

读者投稿

方法一(先别粘贴,注意看下面分析,切勿无脑CV):

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int i;
	for(i=2;i<n;++i){
			if(n%i==0){
			    cout<<"您输入的数不是质数!!" ;
				break; //跳出整个for循环,程序结束
			}
			else 
			cout<<n<<"是质数"<<endl; 
			break;	
		}		
	return 0;
}

这个代码对吗?

这个是读者投稿的代码,我们来执行一下。

c83b1bae41924ef7a220046d6c583ac5.png

好像对啊,换个数试试。

a71259747c0549b08021508a238df5c3.png

好像还是不错。

再换个数呢?

ce610a5fd072484ca439c1d4165eb7f5.png

7c3404c2208b468ab40c84038ff7ca33.png

等会你说什么?9和27是质数?

显然不是!!那么问题出在哪里,下面咱来一起分析一下。

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int i;
	for(i=2;i<n;++i){
			if(n%i==0){
			    cout<<"您输入的数不是质数!!" ;
				break; //代码解析:如果是2的倍数,那么就会被判定为   不是质数
			}
			else 
			cout<<n<<"是质数"<<endl; 
//否则被判断为是质数,比如说9啊,25啊,但是质数的概念不是这么来的,
//9可以拆为3x3,而27可以拆成3x9,这样并不符合质数的概念
			break;	
		}		
	return 0;
}

正确的方法,

第一种:(读者投稿改正版,即原来的方法一。时间复杂度较高,不推荐)

#include<iostream>
using namespace std;
int main() 
{
	int n;
	cout<<"请输入一个数判断来其是否为质数:"<<endl;
	cin>>n;
	int i;
	if(n == 1) cout<<n<<"不是质数"; 
    if(n > 1) {
	for(i=2;i<n;++i){//也可以写成  i<=n-1  一个意思 
			if(n%i==0){
			    cout<<n<<"不是质数!!" ; 
				return 0; //跳出整个for循环,程序结束
			}
		}
		cout<<n<<"是质数"<<endl; 		
	return 0;}
}

第二种:

#include<iostream>
using namespace std;
int main()
{
	int n=0;
	cin>>n;
	int i;
    bool flag = true;   //给flag标签设置布尔类型 
    if(n == 1) flag = false;//如果输入的数字是“1”,那么将flag设置为false 
	for(i=2;i<n;++i){        
			if(n%i==0){     //如果被除了1和它本身以外的数整除,则不是质数,并跳出循环 
			    flag = false;
				break; //跳出整个for循环,程序结束
			}
	}
	if(flag)
		cout<<n<<"是质数"<<endl; 
	else
		cout<<n<<"不是质数"<<endl; 
	return 0;
}

第三种:(引入数学符号----开方,注意导入数学包,时间复杂度较低,代码跑起来快) 

为什么引用平方根,这是百度百科的说法。简单说,你比如27=3  x  9,其中eq?%5Csqrt%7B27%7D介于是5和6之间,3小于根号27,而9大于根号27,得出27不是质数。再比如eq?%5Csqrt%7B7%7D是介于2和3,没有除1和7本身外的其他两个因数相乘等于7,所以7是质数。

548f49da7670467195a2751335be9880.png

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int n;
    cin >> n;
    if(n==1) cout<<n<<"不是质数"; 
    if(n>1){
    for(int i = 2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            cout << n << "不是质数";
            return 0;
        }
    }
    cout << n << "是质数"<<endl;}
    return 0;
}

质数也叫做素数,是指一个数除1和它本身外,没有其他的除数。

什么?让我说人话?

好嘞哥儿。

比如:2 , 3 , 5 , 7属于质数;

而4 ,6 , 8不属于质数,

因为watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5biF5biF6aW_5pmV5LqG,size_20,color_FFFFFF,t_70,g_se,x_16

如果还不明白欢迎撩我~ 

原创不易,各位客官,点个不要钱的赞吧。

得嘞,您慢走~

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值