LoginSignup
1
1

More than 3 years have passed since last update.

Project Euler 53をPythonでやってみる

Posted at

問題 53

解答

組み合わせ${}_n \mathrm{C} _r$は真ん中に行くにつれて大きくなっていくのでそれを利用しすると、各$n$に対して$r$を下から順に確認していき初めて1000000を超える$r$を見つけるとrからn-rまでは全て1000000以上となる。
これを利用して次のようなプログラムを組んだ。

ProjectEuler53.py
def factorial(n):
    if n==0: return 1
    prod = 1
    for i in range(1,n+1):
        prod *= i
    return prod

def check(n):
    for r in range(int(n/2)+1):
        c = factorial(n)/(factorial(r)*factorial(n-r))
        if c > 1000000:
            return n-2*r+1
    return 0


num_sum = 0
for n in range(1,101):
    num_sum += check(n)
print(num_sum)

0.088 seconds

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1