2017-09-15 86 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))