2017-09-15 6 views
2

私は与えられた入力番号のすべての素数除数を見つけるだろうプロジェクトを書くために着手しました。検索首相除数C++

int checkPrimeDivisors = 0; 
int x = 0; 

bool isPrime(int someNumber) { 
    bool status = true; 
    for (int z = 2; z <= sqrt(someNumber); z++) { 
     if (someNumber % z == 0) 
      return false; 
    } 
    return true; 
} 


int main() { 
    cin >> x; 
    for (int someNumber = 1; someNumber < x; someNumber++) { 
     if (x % someNumber == 0 && someNumber == isPrime(someNumber)) 
      cout << someNumber << endl; 
    } 
    return 0; 
} 

これは私が思いついたコードです。ループはすべての除数をチェックして、& & someNumber == isPrime(someNumber)を省略すると動作しますが、条件付きチェックを追加すると除数はまったく表示されません。 私は何が問題なのか理解できないようです。助けに感謝します。

+0

無関係:繰り返し呼び出すことはプライムです。素数のふるい分けアルゴリズムを使用して結果をキャッシュすることに注目してください。 – user4581301

+0

'x'に入力された番号と' isPrime() 'の真偽結果を比較することで、正確に何が達成されると思いますか? [あなたのラバーダックに説明してみてください](https://en.wikipedia.org/wiki/Rubber_duck_debugging)できますか? –

+0

'isPrime'関数では' status'変数を使用しません。 'sqrt'の代わりに' z * z <= someNumber'を実行すれば、平方根を計算するよりも安くて済みます。 – Carl

答えて

1

isPrime(someNumber)はブール値を返します。ブール値はほとんど決してsomeNumberと同じではありません。 ==テストの必要はありません:

if (x % someNumber == 0 && isPrime(someNumber))