老师,我想请问一下这道题怎么写?

来源:2-7 野指针与空指针

慕侠4575653

2018-07-28 17:08:15


http://img.mukewang.com/climg/5b5c32560001acf705550448.jpg
请问以上代码是哪里出错,要怎么改呀?

写回答

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。


0

慕侠4575653

提问者

2018-07-29

正确格式???

0
huly
h 你好,请不要截图,直接以编码格式贴出源码~~
h018-07-30
共1条回复

guly

2018-07-29

你好,请以正确的格式贴出代码,祝学习愉快!

0

0 学习 · 593 问题

查看课程