2013-01-19 29 views
-3

嘗試使用Erathosthenes篩選打印數字的主要因子,而不是找到因子,然後檢查每個因子是否爲質數。使用Eththosthenes篩選的主要因素

#include<stdio.h> 
#include<math.h> 

void primeFactors(int num) 
{ 
    int factors[100]; 

    int i,j=0,u,k=0,l; 
    u=sqrt(num); 

    for(i=0;i<100;i++) 
     factors[i]=1; 

    for(i=2;i<=u;i++) 
    { 
     if(factors[i]==0) 
      continue; 

     if(num%i==0) 
     { 
      factors[j]=i; 
      l=factors[j]; 
      k=2*factors[j]; 
      j++; 

      while(k<=u) 
      { 
       if(factors[k]==0) 
        continue; 
       factors[k]=0; 
       k+=l; 
      } 
     } 
    } 

    for(i=2;i<=u;i++) 
     if(factors[i]!=1) 
      printf("%d\n",factors[i]); 

} 

int main() 
{ 
    int n=797; 
    primeFactors(n); 
    return 0; 
} 

在Xcode上運行時,它既不顯示任何錯誤也不打印任何東西。我無法弄清楚這個問題。爲什麼不打印? 謝謝。

+0

要求人們在代碼中發現錯誤並不是富有成效的。您應該使用調試器(或添加打印語句)來隔離問題,然後構造一個[最小測試用例](http://sscce.org)。 –

+0

@Oli Charlesworth - 謝謝。我嘗試過使用調試器,但它立即切換到組裝視圖,並且添加打印語句也沒有多大幫助。 –

+0

適當的打印語句應該允許您準確地跟蹤程序正在進行的操作,以及它爲何做出各種決定。然後,通過將這些信息與您預期發生的事情進行比較來使用這些信息。這就是調試的內容。 –

回答

0

這一部分:

while(k<=u) 
{ 
    if(factors[k]==0) 
     continue; 

看起來很像一個無限循環。

+0

確實。但是通過回答,你已經讓OP不把時間花在學習調試技術上:( –

+0

我們可以將這個邏輯應用到幾乎任何問題上,不過這裏不是唯一的錯誤 – JasonD

+0

我們可以肯定地將這個邏輯應用到*很多*的問題,是的!但一般來說,任何形式的問題「我的代碼中的錯誤是什麼?我沒有調試過」從我這裏得到一個立即的近距離投票... –