私はProject Eulerから取得したプライムテストアルゴリズムを持っていますが、43が入力として渡されたときfalseを返します。擬似コードは概要で与えられました。これをC++コードに変換しました。疑似コードの変換に間違いがあるかもしれません。アルゴリズムの実際の問題は何ですか?プライムテストアルゴリズムが正しく動作しない
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int n)
{
if(n <= 1)
{
return false;
}
else if(n < 4)
{
return true;
}
else if(n % 2 == 0)
{
return false;
}
else if(n < 9)
{
return true;
}
else if(n % 3 == 0)
{
return false;
}
else
{
int r = sqrt(n);
int f = 5;
while(f <= r)
{
if(n % f == 0)
{
return false;
}
if((n + 2) % f == 0)
{
return false;
}
f = f + 6;
}
return true;
}
}
int main()
{
cout << is_prime(43);
system("PAUSE");
return 0;
}
ブラケットの多くを、あなたがうまくいかないものを見ますたよりelse'sは、値43を使用してコードを読めない – Slava
デバッグそれを作る 'redundand:あなたはすべてのそれらの
if
文を減らし、多少あなたのコードを簡素化することができます。落とし子が気に入らない場合は、printf-debuggingを使用してください。 – MrSmith42ループの2番目のテストは '(43 + 2)%5 == 0'です。これは明らかです。 – molbdnilo