我有以下代码,用于使用 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
之外的所有数字 2 and 3
,其中输出为 0
而不是 1
。我想我知道为什么。对于 x = 2 and 3
,i
循环中没有 for
,因此 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
的末尾而不返回值。
从循环中提取返回true的结果!
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;}
用 C++ 编写一个程序来查找某个范围内的质数。用户必须输入程序的起始和结束范围才能显示准确的输出。