Что делать, если «более одного экземпляра перегруженной функции« sqrt »соответствует списку аргументов»? - PullRequest
4 голосов
/ 25 февраля 2012

Я получаю ошибку в своем коде в цикле 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;
}

Ответы [ 3 ]

10 голосов
/ 25 февраля 2012

Попробуйте:

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

Происходит следующее: <cmath> содержит 3 различных определения sqrt , и компилятор не знает, какое из них вы пытаетесь использовать.

0 голосов
/ 25 февраля 2012

Вы пропустили угловую скобку в вашем коде после второй функции Вы компилируете это с тегом -lm?

плюс вам нужно ввести t как int.

0 голосов
/ 25 февраля 2012

Вам нужно написать разумную функцию sqrt. Метод Ньютона , вероятно, самый простой путь. Кроме того, не вызывайте функцию sqrt каждый раз в цикле. Просто позвоните один раз.

...