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

VS Studio bizarre output in C++ (prime number check)?

本文关键字:检查 输出 Studio C++ VS      更新时间:2023-10-16

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

#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;
}

正如评论者所暗示的那样,您的程序具有未定义的行为,因为isPrime并不总是从您所说的函数返回。从C++标准:

从函数末尾流出等效于没有值的返回;这会导致值返回函数中出现未定义的行为。

因为你已经声明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.