GMPという巨人(の肩に乗る)

P80は100までの自然数のうち、無理数なものの平方根の整数部を含め、100桁の各数字を合計して総計を出せというもの。
普通に計算したのでは誤差も出るし、そもそもそんな桁が出ない。
Pythonの演算に制限がないのは整数演算だった)

まぁ、順当に行けば無限分数の展開とかをしこしこ考えて整数演算に持ち込むべきなんだろうけど、ちいとなぁ。
(そもそも、それはあくまで「近似」でしかないはずだし)

そういえば、少し前からGMPという単語が妙にチラチラしているのだった。
本来はC用のライブラリ?

でも、当然のごとく?Pythonバインディングもあるよね。
ということで見つけたのがgmpy
ところが、予想通り?使い方が???
(一番それっぽいgmpy.sqrt()を使うと、なぜか整数部分しか返ってこない仕様だとか、意味不明)
試行錯誤を繰り返し、どうにか叩き出した。

時間がかかったのはライブラリの使い方を調べるってのは各種暗号ライブラリのときを思い出すな。

一応根幹部分だけメモをかねて書いておこう

import gmpy
a=gmpy.fsqrt(gmpy.mpf(2.0,512))
total=0
for i in str(a)[0:101]:
if i!=".":total+=int(i)
print "total",total
=>total 475
となり、例題の数字と一致する

ps
GMPにはis_squareなる便利な?関数もあるんだった。
is_square(i)==0: #平方数かどうかのチェック
平方数の時には1が返るらしい。