欧拉计划 Project Euler 36-42
Project Euler 36-42Project Euler: https://projecteuler.net/Project Euler | 欧拉计划: https://pe-cn.github.io/Project Euler 1-7Project Euler 8-14Project Euler 15-21 & 67Project Euler 22-28Project Euler
·
Project Euler 36-42
Project Euler: https://projecteuler.net/
Project Euler | 欧拉计划: https://pe-cn.github.io/
Project Euler 1-7
Project Euler 8-14
Project Euler 15-21 & 67
Project Euler 22-28
Project Euler 29-35
Project Euler 36-42
Project Euler 43-49
Project Euler 50-56
Project Euler 57-63
如果有错误,还望指出,欢迎互相交流学习
随缘更新
Problem 36: Double-base palindromes
Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.
- 可以只检查10进制回文数
def palindromes(num):
num = str(num)
for i in range(len(num)//2):
if num[i] != num[-(i+1)]:
return False
return True
SUM = 0
for i in range(1000000):
if palindromes(i) and palindromes(bin(i)[2:]):
SUM += i
print(SUM)
872187
Problem 37: Truncatable primes
Find the sum of the only eleven primes that are both truncatable from left to right and right to left.
def is_primes(n):
n = int(n)
if n<=1:
return False
for j in range(2,int(n**0.5)+1):
if n%j==0:
return False
else:
return True
ans = []
for i in range(10,1000000):
i = str(i)
for j in range(len(i)):
if (is_primes(i[j:]) and is_primes(i[0:j+1])) is False:
break
else:
ans.append(int(i))
if len(ans)==11:
break
print(sum(ans))
748317
Problem 38: Pandigital multiples
What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, … ,n) where n > 1?
def check(s):
if len(str(s)) is not 9:
return False
return len(set(str(s).replace('0',''))) == 9
def link(number, max_multiplier):
s = ''
for i in range(1, max_multiplier+1):
product = number * i;
s += str(product)
return s
ans = 0
max_number = 10000 #max number 10000 when n=2
for number in range(9, max_number):
for n in range(2, 6):
s = link(number, n)
if check(s):
ans = max(largest_value, int(s))
print(ans)
932718654
Problem 39: Integer right triangles
For which value of p ≤ 1000, is the number of solutions maximised?
ans = {}
for i in range(1,1000):
for a in range(1,i):
for b in range(a,i-a):
if a**2 + b**2 == (i-a-b)**2:
if not i in ans:
ans[i] = []
ans[i].append([a,b,i-a-b])
a = sorted(ans.items(), key=lambda x: len(x[1]), reverse=True)
print(a[0][0])
840
Problem 40: Champernowne’s constant
If d n d_n dn represents the n t h n^{th} nth digit of the fractional part, find the value of the following expression. d 1 × d 10 × d 100 × d 1000 × d 10000 × d 100000 × d 1000000 d_1 × d_{10} × d_{100} × d_{1000} × d_{10000} × d_{100000} × d_{1000000} d1×d10×d100×d1000×d10000×d100000×d1000000
s = ''
for i in range(1000001):
s += str(i)
int(s[1])*int(s[10])*int(s[100])*int(s[1000])*int(s[10000])*int(s[100000])*int(s[1000000])
210
Problem 41: Pandigital prime
What is the largest n-digit pandigital prime that exists?
def f(s):
if len(s) == 1:
return s
result = []
for i in range(len(s)):
sub = s[:i] + s[i+1:]
for j in f(sub):
result.append(s[i] + j)
return result
def is_primes(n):
n = int(n)
if n<=1:
return False
for j in range(2,int(n**0.5)+1):
if n%j==0:
return False
else:
return True
def find():
s = '987654321'
for i in range(10):
for num in f(s):
if is_primes(int(num)):
return int(num)
s = s[1:]
find()
7652413
Problem 42: Coded triangle numbers
Using words.txt(right click and ‘Save Link/Target As…’), a 16K text file containing nearly two-thousand common English words, how many are triangle words?
f = open('data/p042_words.txt')
words = f.readlines()
f.close()
words = words[0][1:-1].split('","')
trinumber = [1]
n = 2
while trinumber[-1] < 26*6:
trinumber.append(n*(n+1)//2)
n += 1
ans = 0
for word in words:
SUM = 0
for s in word:
SUM += ord(s) - 64
if SUM in trinumber:
ans += 1
print(ans)
162
更多推荐
已为社区贡献1条内容
所有评论(0)