VS Studio奇怪的C ++输出(素数检查)?

时间:2018-03-04 21:45:24

标签: c++ visual-studio compilation

我有一个简短的程序,它包含一个函数,用于检查数字是否为素数。但是,当我调用数字127的函数时,编译器会在VS Studio中输出3。我想问为什么会这样?

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int k) {
    for (int i = 2; i < sqrt(i); i++) {
        if (k%i == 0) {
            return true;
        }
        else {
            return false;
        }
    }
}
int main()
{

    cout << isPrime(3) << endl;


    return 0;
}

1 个答案:

答案 0 :(得分:0)

正如评论者所提到的,你的程序有不确定的行为,因为isPrime并不总是从你说的函数返回。来自the C++ standard

  

离开函数末尾相当于没有值的返回;这会导致值返回函数中的未定义行为。

因为您已声明isPrime将返回bool,并且您并不总是返回bool您有未定义的行为。

相反,您可能希望迭代所有奇数到k,并检查k是否可以被数字整除,如果是return false(因为它不会素数)。否则,return true结尾。

可能看起来像这样:

bool isPrime(unsigned long k)
{
    for (auto i = 3; i * i <= k; i += 2)
        if (k % i == 0)
           return false;

    return true;
}

我会留给您,让您了解如何处理2