2014-07-02 17 views
-5

ive精化了一下。有人可以改變它對我來說正確的方式嗎? 我還引入了一個新的變量isPrime我想這是一個好一點我試圖找出如何計算一個數字是否爲素數

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

     int p = 7; 
     int d, isPrime = 0; 

     if (p % 2 != 0) 
     { 
      for (d = 2; d < p; d++) { 
       p % d; 
      } 
       if (p % d == 0) 
       { 
        isPrime = 1; //not prime 
       } 
       if (p % d != 0) 
       { 
        isPrime = 2; //is prime 
       } 
       if (isPrime == 1) 
       { 
        NSLog(@"its not prime"); 
       } 
       if (isPrime == 2) { 
        NSLog(@"its prime"); 
       } 

     } 
     else 
      NSLog(@"sorry"); 
    } 

    return 0; 
} 
+0

你有什麼問題嗎? –

+0

擡頭看看Erawhathisname的好篩。 –

+0

'd'是未初始化的? – Pang

回答

-1

開始嘗試這種

  int p = 7; 
      int d, isPrime = 2; 

      if (p % 2 != 0) 
      { 
       for (d = 2; (d < p) && (isPrime == 2); d++) { 
        if (p % d == 0) 
        { 
         isPrime = 1; //not prime 
        } 
        if (p % d != 0) 
        { 
         isPrime = 2; //is prime 
        } 
       } 
       if (isPrime == 1) 
       { 
        NSLog(@"its not prime"); 
       } 
       if (isPrime == 2) { 
        NSLog(@"its prime"); 
       } 
      } 
      else 
       NSLog(@"sorry"); 
0

這是素數計算的僞代碼:

int num = 11; 

NSString * res = null; 
for(int i = 2 ;i<num ;i ++) 
{ 
    if(num%i == 0) 
    { 
    res = @"This is not a prime number"; 
    break 
    } 
else{ 
    res = @"This is prime number"; 

    } 

} 
+1

僅供參考,它是「僞」而不是「sudo」 – rmaddy

+0

@rmaddy:謝謝:) 。我的錯誤 –

2

有埃拉托色尼的著名篩,但是如果你正在編寫一個程序,它只需要一個數字作爲輸入並決定它是否是主要的,Sieve做的比你需要的要多(它發現所有的素數都小於你選擇的某個值),所以它可能不是你最有效的選擇算法。

一對夫婦要找到素數其他的事情:

如果您發現p甚至沒有,你只需要嘗試通過數除以它,那就是,3,5,7,9,等(是的,一旦你知道它不能被3整除,技術上你知道它不能被9整除,但在你的算法中考慮這樣的事情可能並不值得甚至有效)。嘗試比sqrt(p)大的因子作爲除數。如果你到那時還沒有找到除數,你永遠不會(除了1和p本身)。

如果你發現一個數字除以p,你可以立即說p不是素數。 (您可能要確保你退出任何循環然後,太,否則你可能最終印刷宣佈,p爲素不超過一次。)

...但是你必須從未p是在所有循環完成之後,直到算法結束。在此之前,你可以說的最多的是你沒有但是發現證明p而不是素數。

0

上面的循環是好的,但你必須從3而不是2.

+0

//試過了,但仍然沒有工作 而(p MendyK

+0

既然你想知道'p'是否是素數,你可以嘗試用數字'd'除以它小於它。 'p

+0

非常感謝!我還需要改進什麼?我認爲我嵌套錯誤? – MendyK

相關問題