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)

何が起こっているかというと、sqrt の<cmath>3 つの異なる定義が含まれており、コンパイラはどれを使用しようとしているのかを認識していません。

于 2012-02-24T23:24:52.743 に答える
0

コード内の 2 番目の関数の後に角かっこがありません。-lm タグを付けてコンパイルしていますか?

さらに、j を int として型キャストする必要があります。

于 2012-02-24T23:25:34.247 に答える
-1

賢明な関数を書く必要がありsqrtます。ニュートン法はおそらく最も簡単な方法です。sqrtまた、ループ内で毎回関数を呼び出さないでください。一度だけ呼び出してください。

于 2012-02-24T23:23:38.323 に答える