Javascript 斐波那契问题,超过int的最大值
我正在努力解决这个问题Javascript 斐波那契问题,超过int的最大值,javascript,int,max,fibonacci,Javascript,Int,Max,Fibonacci,我正在努力解决这个问题 这是我的解决办法。对于n=78,结果是正确的,较高的值会使结果超过max int。由于spidermonkey,我不能使用BigInt()。那么就不能使用javascript。。一旦你的整数超过最大安全整数,你就被限制了。。。但是你不使用BigInt的理由是有缺陷的-spidermonkey可以处理BigInt超过一年当我尝试在ideone上使用BigInt时,我得到错误:“BigInt没有定义”什么是ideone?这与spidermonkeyIdeone在线编译器有什么
这是我的解决办法。对于n=78,结果是正确的,较高的值会使结果超过max int。由于spidermonkey,我不能使用BigInt()。那么就不能使用javascript。。一旦你的整数超过最大安全整数,你就被限制了。。。但是你不使用BigInt的理由是有缺陷的-spidermonkey可以处理BigInt超过一年当我尝试在ideone上使用BigInt时,我得到错误:“BigInt没有定义”什么是ideone?这与spidermonkeyIdeone在线编译器有什么关系。对于javascript,它使用spidermonkey版本60.2.3,与SPOJ相同。哦,对了,那么就不能使用BigInt:D
MOD = 1000000007;
function copy(a, b) {
a[0][0] = b[0][0];
a[0][1] = b[0][1];
a[1][0] = b[1][0];
a[1][1] = b[1][1];
}
function multiply(fib, base) {
let mat = [[], []];
copy(mat, fib);
mat[0][0] = (fib[0][0]*base[0][0] + fib[0][1]*base[1][0]) % MOD;
mat[0][1] = (fib[1][0]*base[0][0] + fib[1][1]*base[1][0]) % MOD;
mat[1][0] = (fib[0][0]*base[0][1] + fib[0][1]*base[1][1]) % MOD;
mat[1][1] = (fib[1][0]*base[0][1] + fib[1][1]*base[1][1]) % MOD;
copy(fib, mat);
}
function calcMatrix(fib, n) {
const base = [[1,1], [1,0]];
fib[0][0] = 1;
fib[0][1] = 0;
fib[1][0] = 0;
fib[1][1] = 1;
while (n) {
print(n);
if (n&1) {
multiply(fib, base);
}
multiply(base, base);
print('bef', n)
n = n.toString(2).slice(0, -1); //same as n = n >> 1;
print('aft', n)
}
}
let t = parseInt(readline());
while(t--)
{
[N, M] = readline().split(' ');
N = Number(N);
M = Number(M);
let fib = [[],[]];
calcMatrix(fib, N);
let fn = fib[0][1];
let fn1 = fib[1][1] ;
calcMatrix(fib, M-N+2);
// (a%mod -b%mod +mod)%mod
let sum = ((fib[0][0]-1)*fn + (fib[0][1]-1)*fn1 + MOD) % MOD;
print('wyni', sum);
}