Ejemplo n.º 1
0
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])
Ejemplo n.º 2
0
def satisfies(threeDigs, primeIndex, allDigsSoFar) :
	if primeIndex == 0 :
		if threeDigs % 2 == 0 and len(set(allDigsSoFar)) == 9 :
			count = 0
			while (count < 10)  :
				if count not in allDigsSoFar :
					break
				count += 1
			val = digitsToNum([count] + allDigsSoFar)
			print val
			sum[0] += val
	lastTwoDigs = threeDigs/10
	for i in range(10) :
		if (i * 100 + lastTwoDigs) % primes[primeIndex-1] == 0 and i not in allDigsSoFar :
			satisfies(i*100+lastTwoDigs, primeIndex-1, [i] + allDigsSoFar)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
# Find the number of Lychrel numbers below 10000

from useful import digits, isPali, digitsToNum

count = 0
for i in range(10000) :
	sum = i
	for j in range(50) :
		l = digits(sum)
		l.reverse()
		sum += digitsToNum(l)
		if isPali(sum) :
			break
	else :
		print i
		count += 1

print count
		
Ejemplo n.º 5
0
for i in range(10**5) :
	sq = i**2
	digs = digits(sq)
	if len(digs) == len(set(digs)) :
		digs = len(digs)
		if digs in squares :
			squares[digs].add(sq)
		else :
			squares[digs] = set([sq])

for key in m :
	if len(m[key]) > 1 :
		l = len(m[key][0])
		if l in lengths :
			lengths[l].append(m[key])
		else :
			lengths[l] = [m[key]]

for key in reversed(sorted(lengths.keys())) :
	maxNum = 0
	for wordset in lengths[key] :
		word1, word2 = wordset[:2]
		for square in squares[len(word1)] :
			squareDigs = digits(square)
			lis = [squareDigs[word2.index(char)] for char in word1]
			if lis[0] == 0 :
				continue
			num = digitsToNum(lis)
			if num in squares[len(word1)] :
				maxNum = max([maxNum,num,square])
	print maxNum
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
	def numify(self,lis) :
		ret = []
		for l in lis :
			ret.extend(digits(l))
		return digitsToNum(ret)
Ejemplo n.º 8
0
from useful import PrimeList, digitsToNum

primes = PrimeList(1000000)

print "Done primes!"

# Tried 5-digit numbers... didn't work.
# Contruct all 6-digit numbers that have 3 digits in common.
numdigs = 6
for i in range(10) :
	for j in range(10) :
		for l in range(10):
			for pos1 in range(numdigs) :
				for pos2 in range(numdigs) :
					for pos3 in range(numdigs) :
						numcomps = 0
						digs = []
						for k in range(10) :
							digs = [k for x in range(numdigs)]
							digs[pos1] = i
							digs[pos2] = j
							digs[pos3] = l
							if digs[0] == 0 or digitsToNum(digs) not in primes :
								numcomps += 1
							if numcomps > 2 :
								break
						if numcomps <= 2:
							print pos1, i, pos2, j, pos3, l, digs
	
print "Done!"
Ejemplo n.º 9
0
# Find the only eleven primes that are truncatable from left to right and from right to left

from useful import digits, primeList, digitsToNum

isPrime = {}
primes = primeList(1000000)

sum = 0
for p in primes :
	isPrime[p] = True
	dList = digits(p)
	satisfies = True
	for i in range(1,len(dList)) :
		if not isPrime.setdefault(digitsToNum(dList[i:]),False) :
			satisfies = False
			break
	for i in range(1,len(dList)) :
		if not isPrime.setdefault(digitsToNum(dList[:i]),False) :
			satisfies = False
			break
	if satisfies :
		print p
		sum += p

print sum