Created
February 25, 2012 06:39
-
-
Save mactkg/1907055 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import datetime | |
import random | |
import itertools | |
#the prime generetor | |
def genPrime(): | |
gen = itertools.count(2) | |
while True: | |
prime = gen.next() | |
yield prime | |
gen = itertools.ifilter(lambda x, prime=prime: x % prime, gen) | |
def coPromeCheck(m, n): | |
if(n > m): | |
buf = m | |
m = n | |
n = buf | |
while True: | |
if(n == 0): | |
if(m == 1): | |
return True | |
else: | |
return False | |
buf = n | |
n = m % n | |
m = buf | |
#generate prime | |
gengen = genPrime() | |
primes = [] | |
print "genereting prime..." | |
for i in gengen: | |
if i > 100000: | |
break | |
if i > 10000: | |
primes.append(i) | |
#select p, q | |
p = random.choice(primes) | |
q = random.choice(primes) | |
print "p:%d, q:%d" % (p, q) | |
#select e | |
print "searching e..." | |
while True: | |
e = random.randint(1000, 1000000) | |
if coPromeCheck(e, p) and coPromeCheck(e, q): | |
break | |
print "p:%d, q:%d, e:%d" % (p, q, e) | |
#select d | |
print "searching d..." | |
d = 0 | |
law = (p - 1) * (q - 1) | |
while True: | |
d += 1 | |
if (e * d) % law == 1 % law: | |
break | |
print "p:%d q:%d e:%d, d:%d" % (p, q, e, d) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment