diff --git a/e_24.py b/e_24.py index c40b466..38b90ee 100644 --- a/e_24.py +++ b/e_24.py @@ -29,8 +29,6 @@ def all_permutations(seq): temp = [] for k in range(len(seq)): part = seq[:k] + seq[k+1:] - print "k : %s" % (k) - print "part : %s" %(part) for m in all_permutations(part): temp.append(seq[k:k+1] + m) return temp diff --git a/e_27.py b/e_27.py index b136d27..98656fb 100644 --- a/e_27.py +++ b/e_27.py @@ -27,7 +27,7 @@ def is_prime(value): Returns True or False depending whether value is prime or not. """ start = 2 - while (start < value / 2): + while (start <= value / 2): if value % start == 0 : return False else : diff --git a/e_35.py b/e_35.py index e69b139..5148c4a 100644 --- a/e_35.py +++ b/e_35.py @@ -11,7 +11,79 @@ How many circular primes are there below one million? ##--- """ - + +def all_permutations(seq): + """permutate a sequence and return a list of the permutations""" + if not seq: + return [seq] # is an empty sequence + else: + temp = [] + for k in range(len(seq)): + part = seq[:k] + seq[k+1:] + for m in all_permutations(part): + temp.append(seq[k:k+1] + m) + return temp + +def is_prime(value): + """ + Returns True or False depending whether value is prime or not. + """ + start = 2 + while (start <= value / 2): + if value % start == 0 : + return False + else : + start += 1 + return True + +def prime_list(max_val): + """ + Returns a list of all primes below max_val + """ + plist = [] + cur = 2 + while (cur < max_val): + if (cur % 1000) == 0: + print "%d/%d" % (cur, max_val) + + if (is_prime(cur)): + plist.append(cur) + cur += 1 + + return plist + +def perm_primes(max_val): + """ + Returns the number of circular primes below max_val + """ + circulars = 0 + circl = [] + + plist = prime_list(max_val) + print "###" + # stuff here + cpt = 0 + for prime in plist: + cpt += 1 + print "%d/%d" % ( cpt, len(list)) + print circulars, circl + perms = all_permutations(str(prime)) # finds all permutations + + # counts how many permutations are in prime list given one prime + p_cpt = 0 + for perm in perms: + if int(perm) in plist: + p_cpt += 1 + + # if prime is circular + if p_cpt == len(perms): + circulars += 1 + circl.append(prime) + + return circulars, circl + if __name__ == '__main__' : - print "Answer is : %d" % (1000000) + answer, plist = perm_primes(1000000) + print "Answer is : %d" % (answer) + print plist raw_input() \ No newline at end of file