Python Project Euler 012:500个约数的三角形数

Problem 12

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Let us list the factors of the first seven triangle numbers:

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

 

三角形数都可以表示成n*(n+1)/2的形式,不过我在做这道题的时候没有意识到(悲催。。)。

我的思路是把每个三角形数看作n*(2n-1)或n*(2n+1)的其中一种(其实和上面的形式是一样的)。因为n和2n-1或2n+1是互质的,所以该三角形数的约数个数等于n的约数个数与2n-1或2n+1的约数个数的乘积。用dict把计算过的记录起来。

 

View Code
 1 factors = {2:1, 3:1}
 2 def factoring1(n):
 3     if factors.get(n, None) != None:
 4         return factors[n]
 5     else:
 6         facCount = 0
 7         for i in range(1, int(n/2)+1):
 8             if n % i == 0:
 9                 facCount += 1
10         factors[n] = facCount
11         return factors[n]
12 
13 def pe012(k):
14     theNumber = 0
15     n = 2
16     while True:
17         m1 = n * (2*n - 1)
18         factors[m1] = (factoring1(n)+1) * (factoring1(2*n-1)+1) - 1
19         if factors[m1] >= k:
20             theNumber = m1
21             break
22         m2 = n * (2*n + 1)
23         factors[m2] = (factoring1(n)+1) * (factoring1(2*n+1)+1) - 1
24         if factors[m2] >= k:
25             theNumber = m2
26             break
27         n += 1
28     return theNumber    
29 
30 if __name__ == '__main__':
31     a1 = pe012(500)
32     print(a1)

 

转载于:https://www.cnblogs.com/riverrun/archive/2012/12/07/2806822.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值