2012-02-28 56 views
0

編輯我們怎樣才能比較數量少於

我想自然數N的除數

for (int i=1;i<n/2;i++) 
if(n%i==0) 
    print(i); 

我們怎麼能比較的數量小於N/2? 我想找到所有小於n/2個步驟

+0

我刪除了Mathematica的標籤,我不認爲這是適用在這裏。 – 2012-02-28 16:07:05

+1

你可能想要'n%i == 0' – asaelr 2012-02-28 16:07:53

+0

對於初學者來說,它應該是n%i == 0。 – 2012-02-28 16:08:36

回答

1

如果我理解正確的話,你要確定是否i小於n/2的因素是什麼?

試試這個:

if (i < n/2) 
    print(i); 
+0

我想馬雲想找到所有的因素在不到n/2步。 – ElKamina 2012-02-28 16:13:07

+0

啊,我認爲這有點簡單。 – Peter 2012-02-28 16:13:40

0

兩個

for(int i=1;i<n;i++) 

for(int i=1;i<n/2;i++) 

的作品,但第二個是更有效的。一個數字的除數不會超過它的一半。 例如,100的因子肯定會小於等於50.

還有很多其他高效算法there

+0

你的意思是寫第二個更有效嗎? – 2012-02-28 16:13:13

+0

哎呀錯字。編輯它。謝謝 – John 2012-02-28 16:15:07

+0

如果你進一步理解你的想法,你可以選擇sqrt(n)而不是n/2。 – Neowizard 2012-02-28 18:40:49

-1

如何先做師和一個變量存儲,使其不會在的每個迭代計算循環:

int num = Convert.ToInt32(n/2); 
for (int i = 1 ; i < num; i++) 
+0

這在各個層面上都沒有意義。 ToIn32?它已經是一個int32了。除了標籤是C,而不是C#。 「優化」這個部門?有時候是一個好主意,而不是在這種情況下。無論如何,它不會是一個部門,它有可能會自動移出循環。 – harold 2012-02-28 16:21:13

+0

無論如何,這幾乎總是由編譯器完成。不要打擾。 – 2012-02-28 17:55:27

0

嘗試:

for(int i=1; i < (n/2); ++i) 
    if (n%i==0) 
     printf("%d\n",i); 

這個怎麼樣優化(你只需要達到平方根):

for(int i=1; i < sqrt(n); ++i) 
    if (n%i==0) 
     printf("%d\n",i); 

或者這個,你只覆蓋奇數(有用的,如果你檢查素數):

for(int i=1; i < sqrt(n); i+=2) 
    if (n%i==0) 
     printf("%d\n",i); 
+0

for 16 this is bad.print 1,2,4 – 2012-02-28 16:31:10

+0

請注意,在上例中,'n = 26'只會打印'1'。你不能跳過'2',否則就會出現問題。 – 2012-02-28 18:03:26

0

如果我理解正確的話,你正在尋找一些數N的所有約數?

試試這個:

for(int i=1;i<n/2;i++) 
{ 
    if(n%i == 0) 
    printf("%d\n",i); 
} 
1

實際上,你可以做到這一點在sqrt(n)步驟,如下所示:

for(int i = 1;i <= sqrt(n);i++) 
{ 
    if(n % i == 0) 
    { 
    print(i); 
    if(i != sqrt(n)) 
     print(n/i); 
    } 
} 

這將打印的n每個除數一次。需要注意的是,像在示例代碼中,我假設一個print功能,可以實現如下:

void print(int i) 
{ 
    printf("%d\n", i); 
} 
+0

對於數字'24'這是錯誤的 – 2012-03-05 21:51:15

+0

@MaEb它不完全清楚你在找什麼。這正確地打印了所有'n'的因素。對於'n = 24',它打印'1 24 2 12 3 8 4 6'。 – 2012-03-05 22:20:49