Skip to content

Instantly share code, notes, and snippets.

@rmrfus
Last active August 2, 2017 12:57
Show Gist options
  • Save rmrfus/677498e25f5a590b3e797f0e1f8bfe27 to your computer and use it in GitHub Desktop.
Save rmrfus/677498e25f5a590b3e797f0e1f8bfe27 to your computer and use it in GitHub Desktop.
Generates a random integer and rounds it to the nearest prime number
#!/usr/bin/env python
import sys, os
from random import randint
from cPickle import dump,load
REUSE_FILE="round_to_prime.data"
MAX_VALUE = 1000
def is_prime(n):
result = True
for i in range(2, (n//2)+1):
if (n % i == 0):
result = False
break
return result
def round_to_prime(n):
result = None
for i in range(0, (n//2)+1):
if is_prime(n+i):
result = n+i
break
elif (n-i) > 0 and is_prime(n-i):
result = n-i
break
return result
def load_reuse_data(filename):
data = []
if os.path.exists(filename):
with open(filename, 'r') as fh:
data = load(fh)
return data
def save_reuse_data(filename, data):
with open(filename, 'w') as fh:
dump(data, fh)
return None
def find_unused(n, reuse_data):
result = None
for i in range(0, max(MAX_VALUE-n, n)+1 ):
if n+i <= MAX_VALUE and not n+i in reuse_data:
result = n+i
break
elif n-i > 0 and not n-i in reuse_data:
result = n-i
break
return result
def _main():
reuse_data = load_reuse_data(REUSE_FILE)
if len(reuse_data) >= MAX_VALUE:
raise Exception("Pool depleted. Increase MAX_VALUE")
n = find_unused(randint(0, MAX_VALUE), reuse_data)
print "The nearest prime to %d is %d" % (n, round_to_prime(n))
reuse_data.append(n)
save_reuse_data(REUSE_FILE, reuse_data)
return 0
if __name__ == "__main__":
sys.exit(_main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment