2016-06-28 70 views
-5

編寫一個C++算法來測試素數。我的C++代碼如下使用C++查找整數的素數

#include<iostream> 
#include<cmath> 

using namespace std; 

int x,n; 
bool isprime(int); 

int main() 
{ 
    cout<<"Enter prime no"<<endl; 
    cin>>x; 
    for (n=2;n<=floor(sqrt(x));n++) 
    { 
     if (x==1) 
      cout<<"not prime"<<endl; 
     else if (x%n==0) 
      cout<<"is not prime"<<endl; 
     else 
      cout<<"prime"<<endl; 
    } 
} 

但是,當我運行programn我的輸出看起來不正確比如我不斷收到「是素數」的時候,答案顯然不是prime.The

else if (x%n==0) 
cout<<"is not prime"<<endl; 

聲明部分似乎無法妥善執行。任何人都可以向我解釋我的代碼有什麼問題。謝謝

+1

如果您之前沒有使用調試器,現在是瞭解如何使用的正確時機。使用調試器,您可以逐行執行代碼,同時監控變量及其值,並查看變量如何變化。如果你這樣做,你應該很快找到你的問題。 –

+0

您在'for'循環的第一次迭代中做出決定。要找出一個整數是否爲整數,您需要運行整個循環。您確實需要修正格式以獲得更好的視覺代碼流。 – IInspectable

+0

把'x = 9''''''''''不能被'n = 2'整除。因此,您將輸出爲素數。儘管直到現在您還沒有檢查過'n = 3'。想想這裏有什麼問題。提示:也許你想檢查所有的因數,然後決定它是否爲素數。 –

回答

2

您的循環爲x的每個非除數輸出「素數」。你應該在第一個「不是素數」命中後終止循環,如果循環沒有終止,只輸出「素數」。

1

正如Udo Klein所建議的那樣,當檢測到數字不是素數時,您應該跳出循環。也不需要檢查x是否等於循環內的一個。

#include<iostream> 
#include<cmath> 

int main() 
{ 
    int x; 
    std::cout << "Enter prime no" << std::endl; 
    std::cin >> x; 

    if (x == 1) 
    { 
     std::cout << "not prime" << std::endl; 
     return 1; 
    } 

    for (int n = 2; n <= floor(sqrt(x)); n++) 
    { 
     if (x % n == 0) 
     { 
      std::cout << "is not prime" << std::endl; 
      return 1; 
     } 
    } 
    std::cout << "prime" << std::endl; 
    return 0; 
}