總網頁瀏覽量

2019年8月24日 星期六

2000年初到2999年底的所有質數日


質數日介紹:

https://ppt.cc/fdMqtx

20190823除了是823炮戰紀念日之外,也是質數日,群組有人傳了這個新聞,問說有沒有人可以把這1000年所有的53個質數日日期跑出來,索性用Python來寫一下,一開始出來的日期有78個,debug才發現,我的程式把個位數字1也當成質數,再用and指令排除掉個位數字1是質數這個條件,就可以完整的跑出來了!

編號  日期
1     20000107
2     20000503
3     20010223
4     20010313
5     20031223
6     20060107
7     20070823
8     20100907
9     20130223
10     20190523
11     20190823
12     20300317
13     20360317
14     20400307
15     20400823
16     20480107
17     20600317
18     20660617
19     20700103
20     20700223
21     20700307
22     20700523
23     20721013
24     20910103
25     20930113
26     21000313
27     21000907
28     21050503
29     21320107
30     21330313
31     21360223
32     21870223
33     21890107
34     21990523
35     23000617
36     23010313
37     23100313
38     23970313
39     24021013
40     24050503
41     24090907
42     24270223
43     24350503
44     24501223
45     24900307
46     26001013
47     26070313
48     26150503
49     26190313
50     26931013
51     27020113
52     27080107

53     29331013

Python Code:

import math as lp

start=101
end=1232
def isprime(p):
    for i in range(2,int(p**0.5)+1):
        if (p%i)==0:
            return 1 #合數
            break
    else:
        return 0 #質數

flag=0

for i in range(1000):#應到1100
    for j in range(1,13):#月份
        for k in range(20000000+i*10000+j*100+1,20000000+i*10000+j*100+32,2):
            digit=int(lp.log10(k))
            ans=k
            p=[]
            r=[]
            p.append(isprime(k))
            for l in range(digit,0,-1):
                p.append(isprime(k%(10**l)))
                k=k%(10**l)
            r.append(k) #存入個位數,注意1不是質數
            q=set(p)
            q=list(q)
            if len(q)==1 and q[0]==0 and r[0]!=1:
                    flag+=1

                    print(flag,'   ',ans)




沒有留言:

張貼留言