4

我在 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;
}
4

3 回答 3

10

尝试:

for (j = 3; j <= std::sqrt(static_cast<float>(num)); j +=2)

正在发生的事情是<cmath>包含 3 种不同的 sqrt 定义,编译器不知道您要使用哪一个。

于 2012-02-24T23:24:52.743 回答
0

在第二个函数之后,您在代码中错过了一个尖括号您是否使用 -lm 标记编译它?

另外,您需要将 t 类型转换为 int。

于 2012-02-24T23:25:34.247 回答
-1

您需要编写一个合理的sqrt函数。牛顿法可能是最简单的方法。另外,不要sqrt在循环中每次都调用该函数。只需调用一次。

于 2012-02-24T23:23:38.323 回答