麻省理工學院公開課 電腦科學及程式設計導論習題1

2021-07-09 11:43:13 字數 2903 閱讀 9590

習題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指令碼,對新手非...