前十个自然数的平方和是:
12 + 22 + ... + 102 = 385
前十个自然数的和的平方是:
(1 + 2 + ... + 10)2 = 552 = 3025
所以平方和与和的平方的差是3025 385 = 2640.
找出前一百个自然数的平方和与和平方的差。
# 列表的平方和 def list_tuple_sum(_list): return sum([i**2 for i in _list]) # 列表的和的平方 def list_sum_tuple(_list): return sum(_list)**2 print abs(list_tuple_sum(range(1,101)) - list_sum_tuple(range(1,101)))
-25164150
前六个质数是2,3,5,7,11和13,其中第6个是13.
第10001个质数是多少?
# 判断某个数是否质数 def test(n): if n < 2:return False for i in range(2,n): if n%i==0: return False return True i=1 res = [] while len(res)<10001: if test(i): res.append(i) i+=1 print res[-1]
104743
这算法同样很差...
改进版:
# 改进判断某个数是否质数,使用平方根 import math func_sqrt = math.sqrt def test_su2(n): if n<2:return False for i in range(2,int(func_sqrt(n))+1): if n%i==0:return False return True i=2 # 递增 zhisu = 0 # 质数保存变量 zhisu_point = 1 # 质数记数指针,邮2开始,这里当1次 while zhisu_point<=10001: if test_su2(i): zhisu_point += 1 zhisu = i i += 1 print zhisu
找出以下这个1000位的整数中连续13个数字的最大乘积。(例如前五个数字的乘积是7*3*1*6*7=882)
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
s="""73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 85861560789112949495459501737958331952853208805511 12540698747158523863050715693290963295227443043557 66896648950445244523161731856403098711121722383113 62229893423380308135336276614282806444486645238749 30358907296290491560440772390713810515859307960866 70172427121883998797908792274921901699720888093776 65727333001053367881220235421809751254540594752243 52584907711670556013604839586446706324415722155397 53697817977846174064955149290862569321978468622482 83972241375657056057490261407972968652414535100474 82166370484403199890008895243450658541227588666881 16427171479924442928230863465674813919123162824586 17866458359124566529476545682848912883142607690042 24219022671055626321111109370544217506941658960408 07198403850962455444362981230987879927244284909188 84580156166097919133875499200524063689912560717606 05886116467109405077541002256983155200055935729725 71636269561882670428252483600823257530420752963450""" s = ''.join(s.splitlines()) def find_max(s,n): """找出s字符串中,n个相邻的最大值 """ res = ['',0L] for i in range(0,len(s)): if len(s[i:i+n])==n: tmp = reduce(lambda x,y:long(x)*y, [int(e) for e in s[i:i+n]]) if tmp > res[1]: res[0],res[1] = s[i:i+n], tmp return res print find_max(s,13)
一个毕达哥拉斯三元组是一个包含三个自然数的集合,a<b<c,满足条件:
a2 + b2 = c2
例如:32 + 42 = 9 + 16 = 25 = 52.
已知存在并且只存在一个毕达哥拉斯三元组满足条件a + b + c = 1000。
找出该三元组中abc的乘积。
for a in range(1,1000): for b in range(a+1,1000): for c in range(b+1,1000): if a+b+c==1000 and test_xyz(a,b,c): print a,b,c,":",a*b*c
200 375 425 : 31875000
10以下的质数的和是2 + 3 + 5 + 7 = 17.
找出两百万以下所有质数的和。
# 判断某个数是否质数 def test(n): if n < 2:return False for i in range(2,n): if n%i==0: return False return True # 打印小于n的所有质数 def zhisu(n): for i in range(2,n): if test(i):yield i continue print sum(zhisu(2000000))
这个我是等不了运行结果了. 等其他算法.
改进版:
# 改进判断某个数是否质数,使用平方根 import math func_sqrt = math.sqrt def test_su2(n): if n<2:return False for i in range(2,int(func_sqrt(n))+1): if n%i==0:return False return True # 打印小于n的所有质数 def zhisu(func, n): for i in range(2,n): if func(i):yield i continue a= [i for i in zhisu(test_su2, 2000000)] print sum(a)
142913828922