COMP9021 Principles of Programming Lab3

1. Finding particular sequences of prime numbers

Write a program consecutive_primes.py that finds all sequences of 6 consecutive prime 5-digit numbers, say (a,b,c,d,e,f), with b = a+2, c = b+4, d = c+6, e = d+8, and f = e+10. So a, b, c, d and e are all 5-digit prime numbers and no number between a and b, between b and c, between c and d, between d and e, and between e and f is prime.

from math import sqrt

difference = [0, 2, 6, 12, 20, 30]
#給定第一個(gè)五位數(shù)斋竞,后續(xù)數(shù)字與第一個(gè)數(shù)的差值

def is_prime(n):
#判斷是否是質(zhì)數(shù)院究,這里沒有考慮1锋华,因?yàn)楸绢}不需要
    if n % 2 == 0:
        return False
    for i in range(3, round(sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

solution = []
for i in range(10000, 100000):
    candidate = [0] * 6
    flag = 0
    for j in range(len(difference)):
        candidate[j] = difference[j] + i
        if not is_prime(candidate[j]):
            break
    if is_prime(candidate[-1]):
        for e in range(candidate[0], candidate[5] + 1, 2):
        #判斷一組candidate之間的數(shù)是否存在質(zhì)數(shù)
            if is_prime(e) and e not in candidate:
                flag = 1
        if not flag:
            solution.append(candidate)

for i in solution:
    for e in i:
        print(e, end = ' ')
    print()

2. Finding particular sequences of triples

Write a program triples_1.py that finds all triples of positive integers (i, j, k) such that i, j and k are two digit numbers, no digit occurs more than once in i, j and k, and the set of digits that occur in i, j or k is equal to the set of digits that occur in the product of i, j and k.

min_n1 = 10
max_n1 = 76
max_n2 = 87
max_n3 = 98
#三個(gè)兩位數(shù)的成績(jī),規(guī)定三個(gè)數(shù)從小到大分別是n1, n2, n3利虫。由于使用數(shù)字不能重復(fù),所以有上述的最小和最大值

for n1 in range(min_n1, max_n1 + 1):
    used1 = set()
    used1.add(n1 // 10)
    used1.add(n1 % 10)
    if len(used1) != 2:
        continue
    #如果n1的兩個(gè)數(shù)字重復(fù),則在set中只會(huì)記錄一個(gè)數(shù)取视,這樣的情況被自動(dòng)排除
    for n2 in range(n1 + 1, max_n2 + 1):
        used2 = used1.copy()
        #在n1的基礎(chǔ)上每次尋找能n2都重新創(chuàng)建一個(gè)set,避免指針錯(cuò)誤造成程序的bug
        used2.add(n2 // 10)
        used2.add(n2 % 10)
        if len(used2) != 4:
            continue
        for n3 in range(n2 + 1, max_n3 + 1):
            used3 = used2.copy()
            used3.add(n3 // 10)
            used3.add(n3 % 10)
            if len(used3) != 6:
                continue
            multiple = n1 * n2 * n3
            flag = 0
            
            if len(str(multiple)) != 6:
                flag = 1
            for i in str(multiple):
                if int(i) not in used3:
                    flag = 1
                else:
                    used3.remove(int(i))
            if not flag:
                print('%d * %d * %d = %d' % (n1, n2, n3, multiple))

3. Finding special triples of the form (n, n + 1, n + 2)

Write a program triples_2.py that finds all triples of consecutive positive three-digit integers each of which is the sum of two squares, that is, all triples of the form (n, n + 1, n + 2) such that:
--n, n+1 and n+2 are integers at least equal to 100 and at most equal to 999;
--eachofn,n+1andn+2isoftheforma2+b2.

from math import sqrt
from collections import defaultdict

up = round(sqrt(999)) + 1
#因?yàn)橐獙ふ乙粋€(gè)由平方數(shù)組成的三位數(shù)常挚,所以最大平方數(shù)可以計(jì)算作谭,限定這個(gè)上限是up
l = defaultdict(list)

for i in range(0, up):
    for j in range(i + 1, up):
        total = i ** 2 + j ** 2
        if total < 1000 and total > 99:
            l[total] = (i, j)
 #創(chuàng)建一個(gè)字典,key是一個(gè)三位數(shù)奄毡,value是構(gòu)成他的兩個(gè)平方數(shù)的tuple折欠,因?yàn)轭}中可以尋找任意平方數(shù)的組合,所以字典中只保存一個(gè),新出現(xiàn)的覆蓋前面的內(nèi)容

three_digit = set()
for i in l.keys():
    three_digit.add(int(i))
three_digit = sorted(list(three_digit))
#按照從小到大順序創(chuàng)建一個(gè)可以由兩個(gè)平方數(shù)求和表示的三位數(shù)list

result = []
for i in three_digit:
    if (i + 1) in three_digit and (i + 2) in three_digit:
        result.append((i, i + 1, i + 2))
#如果連續(xù)三個(gè)三位數(shù)都可以表征為兩個(gè)數(shù)的平方和锐秦,則加入到list中

while result:
    print(result[0],'(equal to (%d^2+%d^2, %d^2+%d^2, %d^2+%d^2)) is a solution.' % \
          (l[result[0][0]][0], l[result[0][0]][1], l[result[0][1]][0], l[result[0][1]][1], l[result[0][2]][0], l[result[0][2]][1]))
    result.pop(0)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咪奖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子农猬,更是在濱河造成了極大的恐慌赡艰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斤葱,死亡現(xiàn)場(chǎng)離奇詭異慷垮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)揍堕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門料身,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人衩茸,你說(shuō)我怎么就攤上這事芹血。” “怎么了楞慈?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵幔烛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我囊蓝,道長(zhǎng)饿悬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任聚霜,我火速辦了婚禮狡恬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝎宇。我一直安慰自己弟劲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布姥芥。 她就那樣靜靜地躺著兔乞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凉唐。 梳的紋絲不亂的頭發(fā)上庸追,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音熊榛,去河邊找鬼。 笑死腕巡,一個(gè)胖子當(dāng)著我的面吹牛玄坦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼煎楣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼豺总!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起择懂,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喻喳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后困曙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體表伦,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年慷丽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹦哼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡要糊,死狀恐怖纲熏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锄俄,我是刑警寧澤局劲,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站奶赠,受9級(jí)特大地震影響鱼填,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜车柠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一剔氏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竹祷,春花似錦谈跛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至令花,卻和暖如春阻桅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兼都。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工嫂沉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扮碧。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓趟章,卻偏偏與公主長(zhǎng)得像杏糙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚓土,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,437評(píng)論 0 23
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)宏侍。 張土汪:刷leetcod...
    土汪閱讀 12,740評(píng)論 0 33
  • 開心 每次朋友結(jié)婚我去吃喜酒 都很開心 這次 就像是一個(gè)比較大型的聚會(huì) 見到了多年不見的老朋友 也 為下個(gè)月多收了...
    三言兩語(yǔ)啰啰嗦嗦閱讀 104評(píng)論 0 0
  • 你好确丢,我是堯章绷耍! 過(guò)去這一年,收獲頗豐蠕嫁,輾轉(zhuǎn)換了三份工作锨天,從一個(gè)徹頭徹尾的理科生變成一只拖延癥的廣告人,除了浪得飛...
    堯章閱讀 314評(píng)論 0 0
  • SQL 沒有全稱量詞?剃毒,但可以用命題邏輯的等價(jià)公式把帶有全稱量詞的謂詞轉(zhuǎn)換為等價(jià)的帶存在量詞的謂詞:(?x) P=...
    _Nullptr閱讀 1,699評(píng)論 0 1