素数的布尔函数

bool function for prime numbers

本文关键字:函数 布尔      更新时间:2023-10-16

我有以下代码,用于使用 bool 函数检查前 20 个正数是否为素数。

#include <iostream>
#include <cmath>
using namespace std;
bool prime(int);
/* 
function to evaluate whether a positive integer is prime (true)
or not prime (false)
*/
int main()
{
    for(int x=1; x<=20; x++)
    {
        cout <<  x << " a prime ? (1 yes, 0 no) "
             << prime(x) << endl;
    }
    return 0;
}
bool prime(int x)
{
    for(int i=2; i<= sqrt(x); i++)
    {
        if ((x%i) != 0)
            return true;
        else
            return false;
    }
}

它适用于所有数字,1 to 20除了输出0而不是12 and 3。我想我知道为什么。对于x = 2 and 3for循环中没有i,因此i<=sqrt(2)i<=sqrt(3)

如何修改代码以使其也适用于这些值?

还有一个错误消息"Control may reach end of non-void function"。这是为什么呢?

谢谢。

将素数函数修改为以下内容

bool prime(int x)
{
  if (x < 2) return false;
  for(int i=2; i<= sqrt(x); i++) {
    if ((x%i) == 0) return false;
  }
  return true;
}

Control may reach end of non-void function错误消息告诉您,您的 prime 函数并非在所有情况下都返回(当您将 1传递给您的函数时,它不会进入 for 循环,因此在没有显式返回任何内容的情况下退出,这可能会导致未定义的行为)。通常,您希望在任何条件结构之外具有返回指令。

您在prime函数中的错误位置返回。

bool prime(int x) {
    for(int i=2; i<= sqrt(x); i++) {
        if ((x%i) == 0)
            return false;
    }
    return true;
}

在现有函数中,您只测试第一个i。编译器警告是指如果循环完成而不返回(尽管我们很容易看到它永远不会返回),那么控制将到达prime末尾而不返回值。

从循环中提取返回真实结果!

bool prime( int _x )
{
    double x = sqrt( _x );
    for( int i = 2; i <= x; ++i )
        if ( !( _x % i ) )
            return false;
    return true;
}
你也可以

使用它而不需要sqrt函数,它就是这样

bool prime (int num){
int i,temp;
for (i=2; i<=num/2) && temp; i++)
if (num%i==0)
temp = 0;
return temp;}