十進位制數字585 = 1001001001 (二進位制),可以看出在十進位制和二進位制下都是回文(從左向右讀和從右向左讀都一樣)。
求100萬以下所有在十進位制和二進位制下都是回文的數字之和。
(注意在兩種進製下的數字都不包括最前面的0)
import math
defis_palindrome
(x):
""" x是否回文 """
x_str = str(x)
if x_str != x_str[::-1]:
return
false
x_bin = bin(x).replace('0b','')
if x_bin != x_bin[::-1]:
return
false
return
true
defis_palindrome_bin
(x):
""" 二進位制數是否回文 """
x_bin = bin(x).replace('0b','')
if x_bin != x_bin[::-1]:
return
false
return
true
# 直接計算
print(sum([i for i in range(1, 10 ** 6) if is_palindrome(i)]))
# 位數判斷
# 拼接十進位制數為回文,在判斷二進位制數是否回文
palindrome_sum = 0
# 首尾只能是奇數
odd_list = list(range(1, 10, 2))
for i in odd_list:
# 1位數
if is_palindrome_bin(i):
palindrome_sum += i
# 2位數
if is_palindrome_bin(i * 11):
palindrome_sum += i * 11
# 3~7位數
for digit in range(3, 7):
for i_1 in odd_list:
for i_mid in range(10 ** (math.ceil(digit / 2) - 1)):
i_mid_str = str(i_mid).zfill(math.ceil(digit / 2) - 1)
i_str = str(i_1) + i_mid_str + i_mid_str[:digit // 2 - 1][::-1] + str(i_1)
i = int(i_str)
if is_palindrome_bin(i):
palindrome_sum += i
print(palindrome_sum)
尤拉計畫36題
double base palindromes problem 36 the decimal number,585 10010010012 binary is palindromic in both bases.find the sum of all numbers,less than one mi...
尤拉計畫 6
前十個自然數的平方和是 1 2 2 2 10 2 385 前十個自然數的和的平方是 1 2 10 2 552 3025 所以平方和與和的平方的差是3025 385 2640.找出前一百個自然數的平方和與和平方的差。def get square sub x 遞迴,展開行列式 if x 1 return...
尤拉計畫 14
以下迭代序列定義在整數集合上 n n 2 當n是偶數時 n 3n 1 當n是奇數時 應用以上規則,並且以數字13開始,我們得到以下序列 13 40 20 10 5 16 8 4 2 1 可以看出這個以13開始以1結束的序列包含10個項。雖然還沒有被證明 collatz問題 但是人們認為在這個規則下,...