Project Euler 20, 21
前々から少しずつ解いてきたProject Euler(https://projecteuler.net/)の自分なりの解答をここに残しておく。
20番
100の階乗の各桁の和を求める問題
#!/usr/bin/env python # -*- coding: utf-8 -*- ans = [1] for i in range(1,101): C = 0 for j in range(0,len(ans)): ans[j] = ans[j] * i + C C = ans[j] / 10 ans[j] = ans[j] % 10 while C > 0: ans.append(C%10) C = C / 10 print sum(ans)
21番
10000未満の友愛数の和を求める問題
#!/usr/bin/env python # -*- coding: utf-8 -*- def yakusu(num): row_num = num yakusu_list = [] sosu = 2 while num != 1: sosu_count = 0 while num % sosu == 0: sosu_count += 1 num /= sosu if sosu_count > 0: yakusu_list.append((sosu,sosu_count)) sosu += 1 insu_wa = 1 for i in map(lambda x: (x[0]**(x[1]+1)-1)/(x[0]-1),yakusu_list): insu_wa *= i return insu_wa - row_num def isyuai(num): yuai = False if num == yakusu(yakusu(num)) and num != yakusu(num): yuai = True return yuai ans = 0 MAX = 10000 for i in range(2,MAX): if isyuai(i): ans += i print ans
19番までもいつか残しとこう