習題1:
編輯乙個程式,顯示出第1000個質數。
質數的特性是只能被1和自己整除,所以所有演算法都由此引開。
因為一開始漏看了「th」,所以以為是1~1000裡面的質數...
這是一種演算法,這兩種的效率差不多:
print "2",
for x in range(3, 1001):
y = 2
while x % y != 0 and x > y:
y = y + 1
if y == x:
print x,
print "2",
for x in range(3, 1001):
for y in range(2, x):
if x % y == 0:
break
elif y == x - 1:
print x,
這種演算法需要算出所有數字的餘數,所以最慢,但是思考起來最簡單的。
for x in range(1, 1001):
count = 0
for y in range(1, x + 1):
if x % y == 0:
count += 1
if count == 2:
print x,
這種演算法是在別處抄的,運算速度最快,但並不明白其中的數學原理,說不定以後哪天會突然明白。
i = 2
while(i < 1001):
j = 2
while(j <= (i/j)):
if not(i%j): break #if i%j == 0
j = j + 1
if (j > i/j) : print i,
i = i + 1
下面開始正式解題,最終得出第1000個是7919。
x = 3
order = 1
while x > 2 and order < 1000:
count = 0
for y in range (1, x+1):
if x % y == 0:
count += 1
x += 1
if count == 2:
order += 1
if order == 1000:
print x-1
另外一種演算法:
x = 3
order = 1
while x > 2 and order < 1000:
y = 2
while x % y != 0 and x > y:
y = y + 1
if y == x:
order = order + 1
if order == 1000:
print x
x = x + 1
或者
x = 3
pn = [2]
while x > 2 and len(pn) < 1000:
y = 2
while x % y != 0 and x > y:
y = y + 1
if y == x:
x = x + 1
print pn[-1]
第一種由於計算了所有餘數,後者只計算了部分餘數,所以速度比後者要慢很多。前者2.89秒,後者0.61秒。
習題2:
計算2到n的所有質數指數的和,並把這個和的值與n相比;小於n的素數的指數的和與n的比值,隨著n的增加會趨近1;輸入不同的n值。
from math import log
n = int(input("please enter a number for variable n: "))
log_sum = log(2)
for x in range(3, n+1):
y = 2
while x % y != 0 and x > y:
y = y + 1
if y == x:
log_sum = log_sum + log(x)
print "sum = %r" % log_sum
print "n = %r" % x
print "ratio = %r" % (log_sum/x)
如果做成模組的話
def get_prime(x):
x = int(x)
if x == 1:
return false
elif x == 2:
return true
else:
for y in range(2, x):
if x % y == 0:
return false
break
elif y == x - 1:
return true
from math import log
n = int(input("please enter a number for variable n: "))
log_sum = 0
for x in range(2, n+1):
if get_prime(x):
log_sum = log_sum + log(x)
print "sum = %r" % log_sum
print "n = %r" % n
print "ratio = % r" % (log_sum/n)
麻省理工學院 人工智慧公開課總結02
這節課一開始給出了乙個積分式子 5 4 1 x 2 2.5 dx 然後告訴我們機器是如何像人一樣一步步求解這個積分的 首先,將變化公式分為安全變化公式和啟發式公式,安全變化公式包括以下基本的四種 提出負號。提出常數。和之積分等於積分之和。分數積分等於其商之積分。這個時候模型就有基本思路了 應用所有公...
麻省理工學院 人工智慧公開課總結03
這一講首先介紹了乙個移動方塊的人工智慧程式,並以此詳細講解了目標樹的概念,這一程式不僅能夠能夠實現目標,還能解釋自己在過程中的一些行為。目標樹 又叫與或樹 的具體概念是怎樣的呢?目標樹是按照樹形結構對目標或者設計標準進行組織的方法,它把不同的目標均歸類到更高階的目標之下。通過視覺化的方式和分支層次來...
麻省理工學院計算機課程的中文版
今天向大家推薦乙個麻省理工學院計算機課程的中文版 計算機教育缺失的一課 我覺得這個課程還是名副其實的,主要講授的是命令列工具 強大的文字編輯器的使用 使用版本控制系統提供的多種特性等等。這門課除了有詳細的工具用法介紹,也有課後習題作為練習。本課程另乙個亮點是 示例很多都是python指令碼,對新手非...