读者投稿
方法一(先别粘贴,注意看下面分析,切勿无脑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;
}
这个代码对吗?
这个是读者投稿的代码,我们来执行一下。
好像对啊,换个数试试。
好像还是不错。
再换个数呢?
等会你说什么?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,其中介于是5和6之间,3小于根号27,而9大于根号27,得出27不是质数。再比如
是介于2和3,没有除1和7本身外的其他两个因数相乘等于7,所以7是质数。
#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不属于质数,
因为
如果还不明白欢迎撩我~
原创不易,各位客官,点个不要钱的赞吧。
得嘞,您慢走~