我有一个简短的程序,它包含一个函数,用于检查数字是否为素数。但是,当我调用数字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;
}
答案 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
。