プロジェクトオイラー12
プロジェクトオイラーの問題12をpythonで解きました。友人に約数の数え方を教えてもらい、助かりました。
問題
def prime_factors(N): #自然数Nの素因数分解 factors =[] i = 2 while i * i <= N: while N % i == 0: N = int(N / i) factors.append(i) i += 1 if N > 1: factors.append(N) return factors def prime_factors_dic(N): #自然数Nの素因数分解のディクショナリ化 from collections import Counter return Counter(prime_factors(N)) def triangle_number(M): #第M番目の三角数 return int( M*(M+1) / 2) M = 1 while True: #三角数の約数が500以上になるまで三角数を計算し続ける divisors = 1 for value in prime_factors_dic(triangle_number(M)).values(): divisors *= (value + 1) if divisors >= 500: print(triangle_number(M)) break M += 1