def perms (l) : if len(l) is 7 : if isPrime(digitsToNum(l)) : print "\t", l sys.exit(0) else : print l for i in range(7,0,-1) : if i in l : continue perms(l+[i])
def number(theDigs) : #global depth if len(theDigs) == 0 : #print depth return 1 s = 0 for digs2 in powerset(theDigs) : if digs2: count = 0 for digs in allArrangements(digs2) : num = digitsToNum(digs) if isPrime(num) : count += 1 if count > 0 : #for f in range(depth) : # print " ", #print digs, num #depth.append(num) next = [x for x in theDigs if x not in digs] #print num, next s += count * number(next) #depth = depth[:-1] return s
# Find the first iteration where the ratio of primes along th diagonals # of a spiral is below 10%. The spiral is formed as follows: # 21 22 23 24 25 ... # 20 7 8 9 10 # 19 6 1 2 11 # 18 5 4 3 12 # 17 16 15 14 13 from useful import PrimeDict, isPrime total = 0 primes = 0 it = 0 side = 1 while it == 0 or primes*10.0 / total >= 1 : #print it, primes, total it += 1 side += 2 if isPrime(side**2 - side + 1): primes += 1 if isPrime((2*it)**2 + 1): primes += 1 if isPrime((2*it)**2 - 2*it + 1): primes += 1 total += 4 print side - 2
totalSum = 0 for repeatedDigit in range(10) : primes = set([]) for numRepeats in range(numlength-1,0,-1) : numUniques = numlength - numRepeats print repeatedDigit, numRepeats primeCount = 0 primeSum = 0 for i in range(10**numUniques) : uniqueDigs = digits(i,numUniques) for combo in genAllLists(numUniques,0,9) : digs = [repeatedDigit]*numRepeats for place in reversed(range(len(combo))) : digs[combo[place]:combo[place]] = [uniqueDigs[place]] if digs[0] == 0 : continue num = digitsToNum(digs) if num not in primes and isPrime(num) : #print num primes.add(num) primeCount += 1 primeSum += num if primeCount > 0 : print "S(", numlength, ", ", repeatedDigit, ") =", primeSum totalSum += primeSum break print totalSum
def makesPrimes(a,b) : if isPrime(a * 10**(int(log10(b))+1) + b) and isPrime(b * 10**(int(log10(a))+1) + a) : return True return False