白銀比1000桁

黄金比の事を調べていたら白銀比という比を見つけた。1:1+sqrt2だそう。ってことで、ニュートン法を使ってsqrt2を計算して白銀比を1000桁出した。

# coding: utf-8
# 白銀比 1+sqrt(2) をニュートン法を使って1000桁求める

def sqrt(a):
    # ニュートン法でaの平方根を求める。ただし小数点以下打ち切り
    # a: integer
    x = a/2 + 2 # 0除算防止のため適当に2を足す
    px = 0
    while abs(x - px) > 1:
        #print x, px
        px = x
        x = (x + a/x) / 2
    return x

def silverratio(p):
    factor = 10**(p-1)
    sqrt2 = sqrt(2 * (factor**2))
    return factor + sqrt2

def main():
    import sys
    p = int(sys.argv[1])
    print silverratio(p)

if __name__ == '__main__':
    main()

実行

]$ python silverratio.py 1000
2414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989687253396546331808829640620615258352395054745750287759961729835575220337531857011354374603408498847160386899970699004815030544027790316454247823068492936918621580578463111596668713013015618568987237235288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162075847492265722600208558446652145839889394437092659180031138824646815708263010059485870400318648034219489727829064104507263688131373985525611732204024509122770022694112757362728049573810896750401836986836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112024944134172853147810580360337107730918286931471017111168391658172688941975871658215212822951848847

整形

$ python silverratio.py 1000 | python -c "import sys,re; lst = re.findall(r'(\d{10,10}|\d+)', sys.stdin.read()); print '\n'.join(['%4d | ' % (i*50+1) + ' '.join(lst[i*5:i*5+5]) for i in range(len(lst)/5)]); print '       ' + ' '.join(lst[len(lst)/5*5:len(lst)/5*5+5])" 
   1 | 2414213562 3730950488 0168872420 9698078569 6718753769
  51 | 4807317667 9737990732 4784621070 3885038753 4327641572
 101 | 7350138462 3091229702 4924836055 8507372126 4412149709
 151 | 9935831413 2226659275 0559275579 9950501152 7820605714
 201 | 7010955997 1605970274 5345968620 1472851741 8640889198
 251 | 6095523292 3048430871 4321450839 7626036279 9525140798
 301 | 9687253396 5463318088 2964062061 5258352395 0547457502
 351 | 8775996172 9835575220 3375318570 1135437460 3408498847
 401 | 1603868999 7069900481 5030544027 7903164542 4782306849
 451 | 2936918621 5805784631 1159666871 3013015618 5689872372
 501 | 3528850926 4861249497 7154218334 2042856860 6014682472
 551 | 0771435854 8741556570 6967765372 0226485447 0158588016
 601 | 2075847492 2657226002 0855844665 2145839889 3944370926
 651 | 5918003113 8824646815 7082630100 5948587040 0318648034
 701 | 2194897278 2906410450 7263688131 3739855256 1173220402
 751 | 4509122770 0226941127 5736272804 9573810896 7504018369
 801 | 8683684507 2579936472 9060762996 9413804756 5482372899
 851 | 7180326802 4744206292 6912485905 2181004459 8421505911
 901 | 2024944134 1728531478 1058036033 7107730918 2869314710
 951 | 1711116839 1658172688 9419758716 5821521282 2951848847