Last active
August 2, 2017 12:57
-
-
Save rmrfus/677498e25f5a590b3e797f0e1f8bfe27 to your computer and use it in GitHub Desktop.
Generates a random integer and rounds it to the nearest prime number
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
#!/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