def can_split_into_primes(num): digits = EulerUtils.getDigits(num) for i in xrange(1, len(digits)): a = EulerUtils.getNumFromDigits(digits[:i]) b = EulerUtils.getNumFromDigits(digits[i:]) # print "%s:" % num if isPrime(a) and isPrime(b): if isPrime( EulerUtils.concat(b,a) ): # print "\t%s, %s" % (a,b) pair = tuple(sorted((a,b))) if not pair in pairs: #sortedList.sorted_add(pairs, pair) pairs.append(pair)
import EulerUtils def buildFactTable(size): factTable = [1,1] for n in xrange(2, size): factTable.append(n*factTable[n-1]) return factTable def nCr(n,r,factTable): return factTable[n]/(factTable[r]*factTable[n-r]) def main(size): count = 0 factTable = buildFactTable(size) for n in xrange(1,size): for r in xrange(1,n+1): if nCr(n,r,factTable) > 1e6: count += 1 print "ans =", count if __name__ == '__main__': print "time =", EulerUtils.timeit(main, (101,))[0]
from math import sqrt import EulerUtils, sortedList maxSize = 1000000 sieve = EulerUtils.sieve(maxSize) primes = [i for i in xrange(len(sieve)) if sieve[i]] pairs = [] def isPrime(num): if num >= len(sieve): for n in xrange(2, int(sqrt(num))): if num % n == 0: return False return not num % int(sqrt(num)) == 0 else: return sieve[num] def can_split_into_primes(num): digits = EulerUtils.getDigits(num) for i in xrange(1, len(digits)): a = EulerUtils.getNumFromDigits(digits[:i]) b = EulerUtils.getNumFromDigits(digits[i:]) # print "%s:" % num if isPrime(a) and isPrime(b): if isPrime( EulerUtils.concat(b,a) ): # print "\t%s, %s" % (a,b) pair = tuple(sorted((a,b))) if not pair in pairs: #sortedList.sorted_add(pairs, pair) pairs.append(pair) #print
numbers_bythrees.append( numbers[-1] << 16 ) def decipher(encripted_tiplets, key): decripted_triplets = [key^trip for trip in encripted_tiplets] msg = [] for trip in decripted_triplets: msg += [trip >> 16, (trip >> 8) & (2**8-1), trip & (2**8-1)] return msg[:-2] def main(): bestmsg = ("", 0) for a in range(ord('a'), ord('z')+1): for b in range(ord('a'), ord('z')+1): for c in range(ord('a'), ord('z')+1): key = (a << 16) | (b << 8) | c msg = decipher(numbers_bythrees, key) msg = "".join([chr(c) for c in msg]) count = 0 for word in msg.split(): if word in commonWords: count += 1 if count > bestmsg[1]: bestmsg = (msg, count) print bestmsg[0] ascii_sum = 0 for c in bestmsg[0]: ascii_sum += ord(c) print ascii_sum print EulerUtils.timeit(main)