素数的布尔函数
bool function for prime numbers
我有以下代码,用于使用 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
而不是1
的2 and 3
。我想我知道为什么。对于x = 2 and 3
,for
循环中没有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;}
相关文章:
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 将此布尔值传递给此函数的最有效方法是什么?
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 类中的虚拟布尔函数参数不起作用
- 不能制作需要布尔成员函数的C++20概念
- 存储另一个函数返回的布尔数组时遇到问题
- 我无法在 c++ 中调用布尔函数(已关闭)
- 如何创建两个具有相同名称和不同返回类型并基于布尔参数运行的函数
- 如何使用返回布尔值的函数?
- 函数的返回值类型是别名 ***或 *** 布尔值
- 将二维布尔值传递给函数
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 如何将值初始化为返回类型为布尔值的函数?
- 如何使用布尔函数按降序对数组进行排序?
- 在布尔函数 c++ 中使用 elses
- 布尔函数在一段时间内不起作用
- 我正在尝试创建一个布尔函数,该函数计算字符并在字符为"()*-+"时返回 true
- 递归函数、布尔语句和输入C++