50 lines
1.0 KiB
Python
50 lines
1.0 KiB
Python
def isPrime(n):
|
|
if n < 2:
|
|
return False
|
|
if n % 2 == 0:
|
|
return n == 2
|
|
if n % 3 == 0:
|
|
return n == 3
|
|
|
|
d = 5
|
|
while d * d <= n:
|
|
if n % d == 0:
|
|
return False
|
|
d += 2
|
|
|
|
if n % d == 0:
|
|
return False
|
|
d += 4
|
|
return True
|
|
|
|
def generatePrimes():
|
|
yield 2
|
|
yield 3
|
|
|
|
p = 5
|
|
while p > 0:
|
|
if isPrime(p):
|
|
yield p
|
|
p += 2
|
|
if isPrime(p):
|
|
yield p
|
|
p += 4
|
|
|
|
g = generatePrimes()
|
|
transMap = {}
|
|
prev = None
|
|
limit = 1000000
|
|
for _ in xrange(limit):
|
|
prime = next(g)
|
|
if prev:
|
|
transition = (prev, prime %10)
|
|
if transition in transMap:
|
|
transMap[transition] += 1
|
|
else:
|
|
transMap[transition] = 1
|
|
prev = prime % 10
|
|
|
|
print "First {:,} primes. Transitions prime % 10 > next-prime % 10.".format(limit)
|
|
for trans in sorted(transMap):
|
|
print "{0} -> {1} count {2:5} frequency: {3}%".format(trans[0], trans[1], transMap[trans], 100.0 * transMap[trans] / limit)
|