2014-02-12 54 views
0

a。爲什麼該代碼不會在未輸入if條件的範圍內爲每個m打印is prime效率如何計算和基本瞭解

def trial_division(N): 
    up= round(N**0.5+0.5) 
    for m in range (2,up+1): 
     if N%m==0: 
      print (m,"is the smallest divisor of",N) 
      break 
    else: 
     print (N, "is prime") 

b。如何計算其效率?如果N是n位長,爲什麼它不是N ñ\ 2

+0

如何位進入到這個? –

+0

該算法具有N^0.5個階段,因此最多需要N^0.5個分度,但是如果N是n個比特長度,那麼N^0.5就n而言是多少? – user7777777

回答

2

for循環結束後,僅在執行for循環的else條款,除非使用break語句中止循環早。

所以程序按照設計工作:如果for循環正常完成,這意味着2和sqrt(N)之間沒有除數,所以N是質數。

看到它住在Python Tutor

+0

@ Tim Pietzcker如何在代碼配置中顯示在for循環結束後執行其他操作? – user7777777

+2

@ user7777777:從縮進中清楚。 'else'顯然與'for'語句的縮進級別相同。 –

+0

@ Joel Cornett縮進是否會限制操作性能?像Java中的{}? – user7777777

-3

你怎麼樣強制浮點整數因爲範圍的方法發生在整數

def trial_division(N): 
    up= round(N**0.5+0.5) 
    for m in range(2,int(up+1)): 
     if m%2 == 0: 
      print (m, "is the smallest divisor of",N) 
      break 
     else: 
      print (N, 'is prime') 

trial_division(4) 
+0

'round()'已經返回一個整數。 –

+0

python認爲它是一個浮點數,因爲它具有.0結尾,就像2.0是一個浮點數並且它返回的內容,但範圍只需要整數。 – Olu

+0

不在Python 3中;這個問題顯然是關於Python 3的(檢查'print()'函數。在Python 2中,你將得到一個帶有這個代碼的元組表示)。 –