问题21—25参见:http://www.jianshu.com/p/5437d1305800
26、最长的倒数循环节
单位分数是指分子为1的分数。分母从2到10的单位分数的十进制表示如下所示:
1/2= 0.5
1/3= 0.(3)
1/4= 0.25
1/5= 0.2
1/6= 0.1(6)
1/7= 0.(142857)
1/8= 0.125
1/9= 0.(1)
1/10= 0.1
这里0.1(6)表示0.166666…,括号内表示有一位的循环节。可知,1/7有六位循环节。
找出小于1000的正整数d,其倒数的十进制表示的小数部分有最长的循环节。
Python3解答
import re
from decimal import *
getcontext().prec,an_fan=1000*5 ,0
def an_match(number):
fan_form=r"(\d+?)\1" #正则表达式匹配重复的数字
an=re.search(fan_form, str(number))
if an:
return an.group(1)
def fan_num(aa):
if len(str(int(aa)))>=1:
return 10**(len(str(aa))-1)
else:
return 1
for i in range(1,1000):
fan=[an_match(Decimal(1)*fan_num(i)/Decimal(i))]# 防止匹配的数字为0,因此分子要相应的扩大倍数,保证小数点后第一个数字不为0
if fan!=[None]:#只有无限不循环的小数才进行判断
if len(fan[0]) >= an_fan:# 选取最长的
an_fan = len(fan[0])
dnumber = i
print(dnumber)
答案:983
27、二次“素数生成”多项式
欧拉发现了这个著名的二次多项式:n2 + n + 41。n从0到39,这个二次多项式生成了40个素数。然而,当n = 40时,402 + 40 + 41 = 40(40 + 1) + 41能够被41整除,同时显然当n = 41时,412 + 41 + 41也能被41整除。
随后,另一个神奇的多项式n2 − 79n + 1601被发现了,对于n从0到79,它生成了80个素数。这个多项式的系数-79和1601的乘积为-126479。
考虑以下形式的二次多项式:n2 + an + b, 满足|a| < 1000且|b| < 1000。其中|n|表示n的绝对值,例如|11| = 11以及|−4| = 4。这其中存在某个二次多项式能够对从0开始尽可能多的连续整数n都生成素数,求其系数a和b的乘积。
Python3解答
def com_pri(number):#判断素数
if number==2:
return True
else:
for i in range(2,int(number**0.5)+1):
if number%i==0:
return False
return True
fan_an=[x for x in range(2,1001) if com_pri(x)]#n =0 时, b为素数
def an_fan(i,j,n, c=0):
if com_pri(abs(n**2+i*n+j)):
c+=1
return an_fan(i,j,n+1,c)
else:
return c
number=0
for j in fan_an:
for i in [x-j-1 for x in fan_an]:#n= 1 时, a+b+1 为素数
result=an_fan(i,j,0,c=0)
if number <= result:
number = result
ab = [j, i]
print(ab)
print(ab[0]*ab[1])
答案:-59231
28、螺旋数阵对角线
从1开始,按顺时针顺序向右铺开的5 × 5螺旋数阵如下所示:
可以验证,该数阵对角线上的数[红色数字]之和是101。
以同样方式构成的1001 × 1001螺旋数阵对角线上的数之和是。
Python3解答
anfan=sum((j**2+j**2-3*(j-1))*2 for j in range(3,1002) if j%2==1)+1
print(anfan)
答案:669171001
29、不同的幂
考虑所有满足2 ≤ a ≤ 5和2 ≤ b ≤ 5的整数组合生成的幂a^b:
2^2=4, 2^3=8, 2^4=16, 2^5=32
3^2=9, 3^3=27, 3^4=81, 3^5=243
4^2=16, 4^3=64, 4^4=256, 4^5=1024
5^2=25, 5^3=125, 5^4=625, 5^5=3125
如果把这些幂按照大小排列并去重,我们得到以下由15个不同的项组成的序列:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125
在所有满足2 ≤ a ≤ 100和2 ≤ b ≤ 100的整数生成的幂a^b排列并去重所得到的序列中,有多少项。
Python3解答
an=[]
fan=0
for i in range(2,101):
for j in range(2,101):
if i**j not in an:
fan+=1
an.append(i**j)
print(fan)
答案:9183
30、数字的五次幂
令人惊讶的是,只有三个数可以写成它们各位数字的四次幂之和:
1634 = 1^4 + 6^4 + 3^4 + 4^4
8208 = 8^4 + 2^4 + 0^4 + 8^4
9474 = 9^4 + 4^4 + 7^4 + 4^4
由于1 = 1^4不是一个和的形式,因此这里没列出。这些数的和是1634 + 8208 + 9474 = 19316。
找出所有可以写成它们各位数字的五次幂之和的数,并求这些数的和。
Python3解答
def an_fan(number):
an_fan=[]
for i in range(len(str(number))):
an_fan.append(str(number)[i])
if sum(int(i)**5 for i in an_fan)==number:
return True
fanlist = [i for i in range(2,9**6) if an_fan(i)]
print(fanlist)
print(sum(fanlist))
答案:[4150, 4151, 54748, 92727, 93084, 194979],和为443839
持续更新,欢迎讨论,敬请关注!!!