// Calculate Nth Fibbionacci number in O(log N)
// Matrix multiplication
def matmul
(mat1
: Array
[ Array
[Int
] ], mat2
: Array
[ Array
[Int
] ]) = : Array
[ Array
[Int
] ] { var res
: Array
[ Array
[Int
](n
) ](n
); res(i)(j) = 0;
res(i)(j) += mat1(i)(k) * mat2(k)(j);
}
}
}
}
// Matrix powering
def matpow
(mat
: Array
[ Array
[Int
] ], pow
: Int
) = : Array
[ Array
[Int
] ] { var res
: Array
[ Array
[Int
](n
) ](n
); if(i
== j
) res
(i
)(j
) = 1; }
}
res = matmul(res, mat);
}
mat = matmul(mat, mat);
}
}
// Calculate sum of a
var mat Array
[ Array
[Int
](2) ](2); mat(0)(0) = 1; mat(0)(1) = 1; mat(1)(0) = 1; mat(1)(1) = 0;
mat = matpow(mat, n);
}
// Main function
def main
(args
: Array
[ String
]) = { for( i
<-
0 until n
) a
(i
) = println
(fibb
(args
(i
).
toInt)); }
}
Ly8gQ2FsY3VsYXRlIE50aCBGaWJiaW9uYWNjaSBudW1iZXIgaW4gTyhsb2cgTikKb2JqZWN0IE1pbGt7CgkvLyBNYXRyaXggbXVsdGlwbGljYXRpb24KCWRlZiBtYXRtdWwobWF0MSA6IEFycmF5WyBBcnJheSBbSW50XSBdLCBtYXQyIDogQXJyYXlbIEFycmF5IFtJbnRdIF0pID0gOiBBcnJheVsgQXJyYXkgW0ludF0gXSB7CgkJdmFsIG4gPSBtYXQuc2l6ZTsKCQl2YXIgcmVzIDogQXJyYXlbIEFycmF5IFtJbnRdKG4pIF0obik7CgkJZm9yKGkgPC0gMCB1bnRpbCBuKXsKCQkJZm9yKGogPC0gMCB1bnRpbCBuKXsKCQkJCXJlcyhpKShqKSA9IDA7CgkJCQlmb3IoayA8LSBrIHVudGlsIG4pewoJCQkJCXJlcyhpKShqKSArPSBtYXQxKGkpKGspICogbWF0MihrKShqKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gcmVzOwoJfQoJLy8gTWF0cml4IHBvd2VyaW5nCglkZWYgbWF0cG93KG1hdCA6IEFycmF5WyBBcnJheSBbSW50XSBdLCBwb3cgOiBJbnQpID0gOiBBcnJheVsgQXJyYXkgW0ludF0gXSB7CgkJdmFsIG4gPSBtYXQuc2l6ZTsKCQl2YXIgcmVzIDogQXJyYXlbIEFycmF5IFtJbnRdKG4pIF0obik7CgkJZm9yKGkgPC0gMCB1bnRpbCBuKXsKCQkJZm9yKGogPC0gMCB1bnRpbCBuKXsKCQkJCWlmKGkgPT0gaikgcmVzKGkpKGopID0gMTsKCQkJCWVsc2UgcmVzKGkpKGopID0gMDsKCQkJfQoJCX0KCQl3aGlsZShwb3cgPiAwKXsKCQkJaWYocG93ICUgMil7CgkJCQlyZXMgPSBtYXRtdWwocmVzLCBtYXQpOwoJCQl9CgkJCW1hdCA9IG1hdG11bChtYXQsIG1hdCk7CgkJfQoJCXJldHVybiByZXM7Cgl9CgkvLyBDYWxjdWxhdGUgc3VtIG9mIGEKCWRlZiBmaWJiKG4pIDogSW50ID0gewoJCXZhciBtYXQgQXJyYXlbIEFycmF5IFtJbnRdKDIpIF0oMik7CgkJbWF0KDApKDApID0gMTsgbWF0KDApKDEpID0gMTsgbWF0KDEpKDApID0gMTsgbWF0KDEpKDEpID0gMDsKCQltYXQgPSBtYXRwb3cobWF0LCBuKTsKCQlyZXR1cm4gbWF0KDEpKDApOwoJfQoJLy8gTWFpbiBmdW5jdGlvbgoJZGVmIG1haW4oYXJncyA6IEFycmF5WyBTdHJpbmcgXSkgPSB7CgkJdmFsIG4gPSBhcmdzLnNpemU7CgkJZm9yKCBpIDwtIDAgdW50aWwgbikgYShpKSA9IHByaW50bG4oZmliYihhcmdzKGkpLnRvSW50KSk7Cgl9Cn0K
Main.scala:4: error: illegal start of simple expression
def matmul(mat1 : Array[ Array [Int] ], mat2 : Array[ Array [Int] ]) = : Array[ Array [Int] ] {
^
Main.scala:18: error: illegal start of simple expression
def matpow(mat : Array[ Array [Int] ], pow : Int) = : Array[ Array [Int] ] {
^
Main.scala:36: error: ':' expected but ')' found.
def fibb(n) : Int = {
^
Main.scala:47: error: identifier expected but '}' found.
}
^
four errors found