예제 #1
0
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)
예제 #2
0
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]
예제 #3
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
예제 #4
0
	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)