相変わらず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;

なんて楽勝(笑)ひどいなこれ