1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | // Calculate Nth Fibbionacci number in O(log N) object Main{ // Matrix multiplication def matmul(mat1 : Array[ Array [Int] ], mat2 : Array[ Array [Int] ]): Array[ Array [Int] ] = { val n = mat1.size; var res = new Array[ Array [Int]](n, n); for(i <- 0 until n){ for(j <- 0 until n){ res(i)(j) = 0; for(k <- 0 until n){ res(i)(j) += mat1(i)(k) * mat2(k)(j); } } } return res; } // Matrix powering def matpow(mat : Array[ Array [Int] ], pow : Int): Array[ Array [Int] ] = { val n = mat.size; var par, res = new Array[ Array [Int]](n, n); for(i <- 0 until n){ for(j <- 0 until n){ par(i)(j) = mat(i)(j); if(i == j) res(i)(j) = 1; else res(i)(j) = 0; } } while(pow > 0){ if(pow % 2 == 1){ res = matmul(res, par); } par = matmul(par, par); } return res; } // Calculate sum of a def fibb(n : Int): Int = { var mat = new 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); return mat(1)(0); } // Main function def main(args : Array[ String ]) = { val n = args.size; for( i <- 0 until n) println(fibb(args(i).toInt)); } } |
Ly8gQ2FsY3VsYXRlIE50aCBGaWJiaW9uYWNjaSBudW1iZXIgaW4gTyhsb2cgTikKb2JqZWN0IE1haW57CgkvLyBNYXRyaXggbXVsdGlwbGljYXRpb24KCWRlZiBtYXRtdWwobWF0MSA6IEFycmF5WyBBcnJheSBbSW50XSBdLCBtYXQyIDogQXJyYXlbIEFycmF5IFtJbnRdIF0pOiBBcnJheVsgQXJyYXkgW0ludF0gXSA9IHsKCQl2YWwgbiA9IG1hdDEuc2l6ZTsKCQl2YXIgcmVzID0gbmV3IEFycmF5WyBBcnJheSBbSW50XV0obiwgbik7CgkJZm9yKGkgPC0gMCB1bnRpbCBuKXsKCQkJZm9yKGogPC0gMCB1bnRpbCBuKXsKCQkJCXJlcyhpKShqKSA9IDA7CgkJCQlmb3IoayA8LSAwIHVudGlsIG4pewoJCQkJCXJlcyhpKShqKSArPSBtYXQxKGkpKGspICogbWF0MihrKShqKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gcmVzOwoJfQoJLy8gTWF0cml4IHBvd2VyaW5nCglkZWYgbWF0cG93KG1hdCA6IEFycmF5WyBBcnJheSBbSW50XSBdLCBwb3cgOiBJbnQpOiBBcnJheVsgQXJyYXkgW0ludF0gXSA9IHsKCQl2YWwgbiA9IG1hdC5zaXplOwoJCXZhciBwYXIsIHJlcyA9IG5ldyBBcnJheVsgQXJyYXkgW0ludF1dKG4sIG4pOwoJCWZvcihpIDwtIDAgdW50aWwgbil7CgkJCWZvcihqIDwtIDAgdW50aWwgbil7CgkJCQlwYXIoaSkoaikgPSBtYXQoaSkoaik7CgkJCQlpZihpID09IGopIHJlcyhpKShqKSA9IDE7CgkJCQllbHNlIHJlcyhpKShqKSA9IDA7CgkJCX0KCQl9CgkJd2hpbGUocG93ID4gMCl7CgkJCWlmKHBvdyAlIDIgPT0gMSl7CgkJCQlyZXMgPSBtYXRtdWwocmVzLCBwYXIpOwoJCQl9CgkJCXBhciA9IG1hdG11bChwYXIsIHBhcik7CgkJfQoJCXJldHVybiByZXM7Cgl9CgkvLyBDYWxjdWxhdGUgc3VtIG9mIGEKCWRlZiBmaWJiKG4gOiBJbnQpOiBJbnQgPSB7CgkJdmFyIG1hdCA9IG5ldyBBcnJheVsgQXJyYXkgW0ludF1dKDIsIDIpOwoJCW1hdCgwKSgwKSA9IDE7IG1hdCgwKSgxKSA9IDE7IG1hdCgxKSgwKSA9IDE7IG1hdCgxKSgxKSA9IDA7CgkJbWF0ID0gbWF0cG93KG1hdCwgbik7CgkJcmV0dXJuIG1hdCgxKSgwKTsKCX0KCS8vIE1haW4gZnVuY3Rpb24KCWRlZiBtYWluKGFyZ3MgOiBBcnJheVsgU3RyaW5nIF0pID0gewoJCXZhbCBuID0gYXJncy5zaXplOwoJCWZvciggaSA8LSAwIHVudGlsIG4pIHByaW50bG4oZmliYihhcmdzKGkpLnRvSW50KSk7Cgl9Cn0K
-
upload with new input
-
result: Success time: 0.16s memory: 211648 kB returned value: 0
1 2 3 4 5 6
-
result: Success time: 0.16s memory: 211648 kB returned value: 0



