老师,我想请问一下这道题怎么写?
来源:2-7 野指针与空指针
慕侠4575653
2018-07-28 17:08:15
请问以上代码是哪里出错,要怎么改呀?
3回答
吴祥昇
2018-08-03
#include <iostream> #include <math.h> using namespace std; bool primenumber(int a) { bool b=false; int res=-1; for (int i=2;i<=ceil(sqrt(a));i++) { res=a%i; if(a==2) { b=true; break; } if (res==0) { b=false; break; }else { b=true; } } return b; } int main() { cout<<"请输入一个数"<<endl; int m; cin>>m; cout<<primenumber(m)<<endl; return 0; }
质数的判定可以从反面入手,只要整除某个数(>2),那么就不是质数,就应该直接跳出循环输出布尔值为假。而你的程序里面,就算检测到了已经整除某个数了,还会继续循环,还会检验会不会整除后面的数。这样就把判断条件无形中改成了只要不整除最后一个数就是质数,这显然是不对的。对于输入是2的情况,也是这样,只要输入2,布尔值为真,跳出循环。另外,对于质数的检验,不需要从2遍历到a,只要到比根号a大一点的最近整数就行,这样可以减少很多计算量。至于为什么,你可以自己思考一下。根号和取上限整数需要头文件math.h。
慕侠4575653
提问者
2018-07-29
正确格式???
guly
2018-07-29
你好,请以正确的格式贴出代码,祝学习愉快!
相似问题