kouzukek.info

素数日

#!/usr/bin/env python3

from datetime import date, timedelta
from math import sqrt

def daterange(begin, end):
    cursor = begin
    oneday = timedelta(days=1)

    while True:
        yield cursor
        if cursor == end:
            return
        cursor += oneday

def primedates(begin, end):
    remove_composite = lambda l, k:[n for n in l if n % k != 0]

    days = (d.year * 10000 + d.month * 100 + d.day
                for d in daterange(begin, end))
    l = remove_composite(days, 2)

    limit = int( sqrt( max(l) ))

    searchlist = remove_composite(range(3, limit + 1), 2)

    while searchlist:
        n = searchlist[0]
        searchlist = remove_composite(searchlist, n)
        l = remove_composite(l, n)
        
    print(list(l))

import cProfile
#cProfile.run("primedate(date(1,1,1), date(9999, 12, 31))")
cProfile.run("primedates(date(1970,1,1), date(2038, 1, 19))")
74/75