问题1-5参见 http://www.jianshu.com/p/f333469fe784
6、平方的和与和的平方之差
前10个自然数平方的和是:1^2 + 2^2 +… + 10^2 = 385。前10个自然数和的平方是:(1 + 2 + … + 10)^2 = 55^2=3025。因此前10个自然数的平方的和与和的平方之差是 3025−385=2640。求前100个自然数平方的和与和的平方之差。
Python3解答
an=sum(i**2 for i in range(1,101))
fan=sum(i for i in range(1,101))**2
print(fan-an)
答案:25164150
7、第10001个素数
如果要依次列出前6个素数的话,它们是:2、3、5、7、11和13。可以看出,第6个素数是13。求第10001个素数。
Python3解答
def an_prime(number):
if number==1 or number==0:
return False
for i in range(2,int(number**0.5)+1):
if number%i==0 and number>i:
return False
return True
d,count=0,0
while 1:
if an_prime(d):
count+=1
if count==10001:
break
d+=1
print(d)
答案:104743
问题8、连续数字最大乘积
在下面的1000个正整数中,连续4个数字的最大乘积是 9 × 9 × 8 × 9 = 5832。
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
找出这个1000个正整数中乘积最大的连续的13个数字,求它们的乘积。
Python3解答
#将以上数据复制到txt文件:secries.txt
an=[]#存储数据
for line in open(r'C:\Users\GWT9\Desktop\ss.txt'):#读取数据
for i in line:
for j in i:
if j!='\n':
an.append(int(j))
zuida=13
fan={}#存储连续13个数字的乘积
for i in range(0,len(an)+1-zuida):
ss=1
for j in an[i:i+zuida]:
ss*=j
fan[i]=ss
#选择字典中值最大的对应的键值
maxkey=max(fan.items(),key=lambda x:x[1])
print(an[maxkey[0]:maxkey[0]+zuida])#[5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5]
print(maxkey)
答案:23514624000
9、特殊的毕达哥拉斯三元组
毕达哥拉斯三元组是三个自然数a < b < c组成的集合,并满足a^2+ b^2 = c^2。 例如3^2 + 4^2 = 9 + 16 = 25 = 5^2。有且只有一个毕达哥拉斯三元组满足 a + b + c = 1000。求这个三元组的乘积abc。
Python3解答
for i in range(1,300):#abc最小值肯定低于300
for j in range(1,500):#abc中间值肯定低于500
if i**2+j**2==(1000-i-j)**2:
print(i,j,1000-i-j)#200 375 425
print(i*j*(1000-i-j))
答案:31875000
10、素数之和
所有小于10的素数的和为2 + 3 + 5 + 7 = 17。求小于两百万的所有素数之和。
Python3解答
#一般方法:全部数字都遍历 用时:23.517s
def an_prime(number):
for i in range(2,int(number**0.5)+1):
if number%i==0 and number!=i:
return False
return True
anfan=0
for i in range(2,2000000):#全部遍历
if an_prime(i):
anfan+=i
print(anfan)
#优化方法:数字筛选 用时:0.124s
def primes(n):
an=[True]*n
for i in range(3,int(n**0.5)+1,2):#消去合数
if an[i]:
an[i*i::2*i]=[False]*int((n-i*i-1)/(2*i)+1)
primelist=[2]+[j for j in range(3,n,2) if an[j]]
return sum(primelist)
print(primes(2000000))
答案:142913828922
持续更新,欢迎讨论,敬请关注!!!