// 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
= new 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 par, res
= new Array
[ Array
[ Int
] ] ( n, n
) ; par( i) ( j) = mat( i) ( j) ;
if ( i
== j
) res
( i
) ( j
) = 1 ; }
}
res = matmul( res, par) ;
}
par = matmul( par, par) ;
}
}
// 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) ;
}
// Main function
def main
( args
: Array
[ String
] ) = { for ( i
< -
0 until n
) println
( fibb
( args
( i
) .
toInt ) ) ; }
}
Ly8gQ2FsY3VsYXRlIE50aCBGaWJiaW9uYWNjaSBudW1iZXIgaW4gTyhsb2cgTikKb2JqZWN0IE1pbGt7CgkvLyBNYXRyaXggbXVsdGlwbGljYXRpb24KCWRlZiBtYXRtdWwobWF0MSA6IEFycmF5WyBBcnJheSBbSW50XSBdLCBtYXQyIDogQXJyYXlbIEFycmF5IFtJbnRdIF0pOiBBcnJheVsgQXJyYXkgW0ludF0gXSA9IHsKCQl2YWwgbiA9IG1hdDEuc2l6ZTsKCQl2YXIgcmVzID0gbmV3IEFycmF5WyBBcnJheSBbSW50XV0obiwgbik7CgkJZm9yKGkgPC0gMCB1bnRpbCBuKXsKCQkJZm9yKGogPC0gMCB1bnRpbCBuKXsKCQkJCXJlcyhpKShqKSA9IDA7CgkJCQlmb3IoayA8LSAwIHVudGlsIG4pewoJCQkJCXJlcyhpKShqKSArPSBtYXQxKGkpKGspICogbWF0MihrKShqKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gcmVzOwoJfQoJLy8gTWF0cml4IHBvd2VyaW5nCglkZWYgbWF0cG93KG1hdCA6IEFycmF5WyBBcnJheSBbSW50XSBdLCBwb3cgOiBJbnQpOiBBcnJheVsgQXJyYXkgW0ludF0gXSA9IHsKCQl2YWwgbiA9IG1hdC5zaXplOwoJCXZhciBwYXIsIHJlcyA9IG5ldyBBcnJheVsgQXJyYXkgW0ludF1dKG4sIG4pOwoJCWZvcihpIDwtIDAgdW50aWwgbil7CgkJCWZvcihqIDwtIDAgdW50aWwgbil7CgkJCQlwYXIoaSkoaikgPSBtYXQoaSkoaik7CgkJCQlpZihpID09IGopIHJlcyhpKShqKSA9IDE7CgkJCQllbHNlIHJlcyhpKShqKSA9IDA7CgkJCX0KCQl9CgkJd2hpbGUocG93ID4gMCl7CgkJCWlmKHBvdyAlIDIgPT0gMSl7CgkJCQlyZXMgPSBtYXRtdWwocmVzLCBwYXIpOwoJCQl9CgkJCXBhciA9IG1hdG11bChwYXIsIHBhcik7CgkJfQoJCXJldHVybiByZXM7Cgl9CgkvLyBDYWxjdWxhdGUgc3VtIG9mIGEKCWRlZiBmaWJiKG4gOiBJbnQpOiBJbnQgPSB7CgkJdmFyIG1hdCA9IG5ldyBBcnJheVsgQXJyYXkgW0ludF1dKDIsIDIpOwoJCW1hdCgwKSgwKSA9IDE7IG1hdCgwKSgxKSA9IDE7IG1hdCgxKSgwKSA9IDE7IG1hdCgxKSgxKSA9IDA7CgkJbWF0ID0gbWF0cG93KG1hdCwgbik7CgkJcmV0dXJuIG1hdCgxKSgwKTsKCX0KCS8vIE1haW4gZnVuY3Rpb24KCWRlZiBtYWluKGFyZ3MgOiBBcnJheVsgU3RyaW5nIF0pID0gewoJCXZhbCBuID0gYXJncy5zaXplOwoJCWZvciggaSA8LSAwIHVudGlsIG4pIHByaW50bG4oZmliYihhcmdzKGkpLnRvSW50KSk7Cgl9Cn0K
compilation info
warning: there were deprecation warnings; re-run with -deprecation for details
one warning found
spoj: The program compiled successfully, but Main.class was not found.
Class Main should contain method: def main(args: Array[String]).
stdout