我想自然數N的除數
for (int i=1;i<n/2;i++)
if(n%i==0)
print(i);
我們怎麼能比較的數量小於N/2? 我想找到所有小於n/2個步驟
我想自然數N的除數
for (int i=1;i<n/2;i++)
if(n%i==0)
print(i);
我們怎麼能比較的數量小於N/2? 我想找到所有小於n/2個步驟
如何先做師和一個變量存儲,使其不會在的每個迭代計算循環:
int num = Convert.ToInt32(n/2);
for (int i = 1 ; i < num; i++)
這在各個層面上都沒有意義。 ToIn32?它已經是一個int32了。除了標籤是C,而不是C#。 「優化」這個部門?有時候是一個好主意,而不是在這種情況下。無論如何,它不會是一個部門,它有可能會自動移出循環。 – harold 2012-02-28 16:21:13
無論如何,這幾乎總是由編譯器完成。不要打擾。 – 2012-02-28 17:55:27
嘗試:
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);
for 16 this is bad.print 1,2,4 – 2012-02-28 16:31:10
請注意,在上例中,'n = 26'只會打印'1'。你不能跳過'2',否則就會出現問題。 – 2012-02-28 18:03:26
如果我理解正確的話,你正在尋找一些數N的所有約數?
試試這個:
for(int i=1;i<n/2;i++)
{
if(n%i == 0)
printf("%d\n",i);
}
實際上,你可以做到這一點在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);
}
對於數字'24'這是錯誤的 – 2012-03-05 21:51:15
@MaEb它不完全清楚你在找什麼。這正確地打印了所有'n'的因素。對於'n = 24',它打印'1 24 2 12 3 8 4 6'。 – 2012-03-05 22:20:49
我刪除了Mathematica的標籤,我不認爲這是適用在這裏。 – 2012-02-28 16:07:05
你可能想要'n%i == 0' – asaelr 2012-02-28 16:07:53
對於初學者來說,它應該是n%i == 0。 – 2012-02-28 16:08:36