读者投稿
方法一(先别粘贴,注意看下面分析,切勿无脑CV):
#include
using namespace std;
int main()
{
int n;
cin>>n;
int i;
for(i=2;i if(n%i==0){ cout<<"您输入的数不是质数!!" ; break; //跳出整个for循环,程序结束 } else cout< break; } return 0; } 这个代码对吗? 这个是读者投稿的代码,我们来执行一下。 好像对啊,换个数试试。 好像还是不错。 再换个数呢? 等会你说什么?9和27是质数? 显然不是!!那么问题出在哪里,下面咱来一起分析一下。 #include using namespace std; int main() { int n; cin>>n; int i; for(i=2;i if(n%i==0){ cout<<"您输入的数不是质数!!" ; break; //代码解析:如果是2的倍数,那么就会被判定为 不是质数 } else cout< //否则被判断为是质数,比如说9啊,25啊,但是质数的概念不是这么来的, //9可以拆为3x3,而27可以拆成3x9,这样并不符合质数的概念 break; } return 0; } 正确的方法, 第一种:(读者投稿改正版,即原来的方法一。时间复杂度较高,不推荐) #include using namespace std; int main() { int n; cout<<"请输入一个数判断来其是否为质数:"< cin>>n; int i; if(n == 1) cout< if(n > 1) { for(i=2;i if(n%i==0){ cout< return 0; //跳出整个for循环,程序结束 } } cout< return 0;} } 第二种: #include 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 if(n%i==0){ //如果被除了1和它本身以外的数整除,则不是质数,并跳出循环 flag = false; break; //跳出整个for循环,程序结束 } } if(flag) cout< else cout< return 0; } 第三种:(引入数学符号----开方,注意导入数学包,时间复杂度较低,代码跑起来快) 为什么引用平方根,这是百度百科的说法。简单说,你比如27=3 x 9,其中介于是5和6之间,3小于根号27,而9大于根号27,得出27不是质数。再比如是介于2和3,没有除1和7本身外的其他两个因数相乘等于7,所以7是质数。 #include #include using namespace std; int main() { int n; cin >> n; if(n==1) cout< if(n>1){ for(int i = 2;i<=sqrt(n);i++) { if(n%i==0) { cout << n << "不是质数"; return 0; } } cout << n << "是质数"< return 0; } 质数也叫做素数,是指一个数除1和它本身外,没有其他的除数。 什么?让我说人话? 好嘞哥儿。 比如:2 , 3 , 5 , 7属于质数; 而4 ,6 , 8不属于质数, 因为 如果还不明白欢迎撩我~ 原创不易,各位客官,点个不要钱的赞吧。 得嘞,您慢走~