我在for循环中的代码中遇到错误for ( j = 3; j <=sqrt(num); j +=2)
:
多个重载函数“sqrt”的实例与参数列表匹配。
我该如何解决?
# include <cmath>
// determine if number is prime
bool isPrime (long n)
{
int j, num = 0;
{
if (num <=1)
return false;
}
for ( j = 3; j <=sqrt(num); j +=2)
{
if (num % j == 0)
return false;
}
return true;
}
答案 0 :(得分:10)
尝试:
for (j = 3; j <= std::sqrt(static_cast<float>(num)); j +=2)
正在发生的事情是<cmath>
包含3个不同的definitions of sqrt,并且编译器不知道您尝试使用哪个。
答案 1 :(得分:0)
在第二个功能之后,你错过了代码中的一个尖括号 你用-lm标签编译它吗?
另外你需要将t类型j作为int。
答案 2 :(得分:-1)
您需要编写合理的sqrt
函数。 Newton's method可能是最简单的方法。另外,每次循环时都不要调用sqrt
函数。只需打电话一次。