2015年12月27日日曜日

151227(7)

Ruby


Stern's diatomic series(4)

行列計算で第10 ** i 項を求めてみた。

require 'matrix'

def f(n)
  return 0 if n == 0
  m = Matrix[[1, 0]]
  m0 = Matrix[[1, 0], [1, 1]]
  m1 = Matrix[[1, 1], [0, 1]]
  n.to_s(2).reverse[0..-2].split('').each{|i| i == '0' ? m *= m0 : m *= m1}
  (m * Vector.elements([1, 1]))[0]
end

N = 100
(0..N).each{|i| p f(10 ** i)}

出力結果
1
3
7
11
43
127
191
1249
897
7623
7271
36101
162479
321915
403997
1428803
1019509
13232201
29665503
59010673
263945319
877154567
882461433
2068567705
4889467859
6969180039
57539447579
9545488487
27629678579
491924028681
2641828456999
551814328661
9518520281087
76008367287467
14497531592309
89868846310031
167023767280505
401012137269069
8536871687545369
5931707331916187
15620163071382969
58899765166917481
53646346833206219
828887435629116181
12823339025800471
424811550937738855
2142134094734576905
16213529205765305645
35694548337522558469
34283540197659980805
167927140074779758557
55508545802688081973
3420451812716595700019
2084027626838769738713
10696737461713119087177
427963341425485262121
774670184077579627033
445629866784443406007399
186471319227195801088697
100674871745425361036985
3427675049219134575645829
5411185428596107328826019
45110210722424583185811951
43436699252913012286550441
1545381824748948524692533
44899288194235199014247585
637125751478667888817264231
2741861658253913280529410883
29718873729572521254305161251
28483864178631057120464624053
22743512746898390445779864145
457247983401091451023370786977
92523430260118438222851390637
2121709433600513041861939409627
5875424096809548348864872231569
255785172523906364039557317601
127394007314155015888372696490331
2824512104586002656400078669743
133806205886326102797035065947639
60776020251835811032335506834225
18171246114696785468962484612603
180498811690939710161811129828349
688075889883964708600568395883245
636562142013468494548927303032127
7079099242592420520930093488105033
31565782860647308656707292391833433
57635595001356009589855499325452753
8279978659327419426136873370033333
1137036023619063445725816001170693533
191794186015950462182905469351791379
502566457900428930690622486589112521
193916620755198348034591204689815265
3844123224578864729406107641124256757
42057507250665157452669839419795067943
29317840951747508976907189460899449969
4875634841711556643720389156319548655
80005068202151126517030597092659821391
7101467528110727786345123463816688288883
54756963417839791699419065067332594925647
11743648481942154673428818386997923945131
82251501217045168774956398214266294624247

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。