プロジェクトオイラー15
プロジェクトオイラー14
プロジェクトオイラーの問題14をPython3で解きました。
Collatz問題と呼ばれるもので、数学的には未解決な問題をとりあえず計算してみましょうってやつでした。
collatz_list = [] for number in range(1000000): collatz_number = 1 while number > 1: if number % 2 == 0: number = int(number / 2) else: number = 3 * number + 1 collatz_number += 1 collatz_list.append(collatz_number) max_chain = max(collatz_list) print(collatz_list.index(max_chain))
プロジェクトオイラー13
プロジェクトオイラーの問題13をPython3で解きました。
Python3では桁溢れは起こらないので大きい数字同士の足し算は足せばいいだけです。
large_numbers = [int(input()) for i in range(100)] sum_of_largge_numbers = sum(large_numbers) string_number = str(sum_of_largge_numbers) print(string_number[0:10])
プロジェクトオイラー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
プロジェクトオイラー11
プロジェクトオイラーの問題11をpythonで解きました。
問題
matrix = [(input()).split(' ') for i in range(20)] #行列として20×20のデータを記憶する rows = range(20) cols = range(20) cells = [(row, col) for row in rows for col in cols] for row, col in cells: #行列の各要素で10の位が0のときは0を消す if matrix[row][col][0] == '0': matrix[row][col] = matrix[row][col][1] #行列の縦の連続した4つの要素の積のリストを作り、その中から最大値を見つける row = 0 products_of_rows = [] while row < 17: for col in range(20): product_number = 1 for i in range(4): product_number *= int(matrix[row + i][col]) products_of_rows.append(product_number) row += 1 max_of_rows = max(products_of_rows) print(products_of_rows) #行列の横の連続した4つの要素の積のリストを作り、その中から最大値を見つける col = 0 products_of_cols = [] while col < 17: for row in range(20): product_number = 1 for i in range(4): product_number *= int(matrix[row][col + i]) products_of_cols.append(product_number) col += 1 max_of_cols = max(products_of_cols) #行列の右斜めの連続した4つの積のリストを作り、その中から最大値を見つける products_of_rdiagonals = [] cells_up_to_17 = [(row, col) for row in range(17) for col in range(17)] for row, col in cells_up_to_17: product_number = 1 for i in range(4): product_number *= int(matrix[row + i][col + i]) products_of_rdiagonals.append(product_number) max_of_rdiagonals = max(products_of_rdiagonals) #行列の左斜めの連続した4つの積のリストを作り、その中から最大値を見つける products_of_ldiagonals = [] cells_up_to_17 = [(row, col) for row in range(17) for col in range(17)] for row, col in cells_up_to_17: product_number = 1 for i in range(4): product_number *= int(matrix[19 - row - i][col + i]) products_of_ldiagonals.append(product_number) max_of_ldiagonals = max(products_of_ldiagonals) maximum = max(max_of_rows, max_of_cols, max_of_ldiagonals, max_of_rdiagonals)
プロジェクトオイラー10
プロジェクトオイラーの問題10をpythonで解きました。
問題
import math def primes(M): #エラトステネスのふるい prime_true_false = [1] * M prime_true_false[0] = 0 prime_true_false[1] = 0 for number in range(2, int(math.sqrt(M)) + 1): if prime_true_false[number]: for multiple in range(number * number, M, number): prime_true_false[multiple] = 0 return [prime for prime in range(2, M) if prime_true_false[prime] ] print(sum(primes(2000000)))