RosettaCodeData/Task/Prime-conspiracy/Python/prime-conspiracy.py

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)