相変わらずProject Euler24, 48
もはやProject Euler日記になっている.いい加減抜けださないと生活に支障が出る(苦笑)
ハッカソンでであった人に影響されて,Pythonを書きたくなったのでPythonで解きました.
問題24 0〜9の数字を辞書順に並べたときの1M番目
先頭が0である場合の数 9!
先頭が1である場合の数 9!
先頭が1で,次が0である場合の数8!
先頭が1で,次が0で,次が2である場合の数7!
…
として,1M番目を探す.%をつかってもっといい解き方がありそうだったけど,なんだか今日は頭が回らない.
#problem #24 digits=10 count = 1000000; factorial=1; sum = 0; l = []; numlist = range(digits); result = []; for j in range(digits,1,-1): counter = 0; while count>sum: factorial = 1; for i in range(1, j): factorial*=i; counter+=1; sum+=factorial; if counter > 0: counter-=1; sum-=factorial; result.append(numlist[counter]); del numlist[counter]; result.append(numlist[0]) print result;
なんというか,僕はコードを書きながら考える人なので,慣れていない言語だと考えにくいと感じた.
でもC++で書いた後にPythonで書き直すとか無駄なのでやりませんが…
次.1^1+2^2+...+1000^1000
これまで大きい数字を扱うコードを沢山書いたので,それを使ってナイーブにやればいいんだけど,
それならPythonで
#Problem 48 num = 0; for i in range(1, 1000, 1): num += (i**i); print num%10000000000;
なんて楽勝(笑)ひどいなこれ