javascript-如何找到一个很大的整数的余数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-如何找到一个很大的整数的余数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1351字,纯文字阅读大概需要2分钟。
内容图文
通过这样做,我找出了斐波那契数列的第n个数:
function add(a, b) {
while (a.length < b.length) a.unshift(0);
while (a.length > b.length) b.unshift(0);
var carry = 0, sum = []
for (var i = a.length - 1; i >= 0; i--) {
var s = a[i] + b[i] + carry;
if (s >= 10) {
s = s - 10;
carry = 1;
} else {
carry = 0;
}
sum.unshift(s);
}
if (carry)
sum.unshift(carry);
return sum;
}
function fib(n) {
var f1 = [0];
var f2 = [1];
while (n--) {
var f3 = add(f1, f2)
f1 = f2;
f2 = f3;
}
return f1.join("");
}
说,我想找到1995年斐波那契数除以8的余数.这样做,
fib(1995) % 8
但是,返回NaN.这是fiddle,输出到console.log.
那么,如何找到1995年斐波那契数除以8的余数呢?
解决方法:
您所描述的是数论的一个非常特殊的应用,称为Pisano period:
In number theory, the nth Pisano period, written π(n), is the period with which the sequence of Fibonacci numbers, modulo n repeats. For example, the Fibonacci numbers modulo 3 are 0, 1, 1, 2, 0, 2, 2, 1, 0, 1, 1, 2, 0, 2, 2, 1, etc., with the first eight numbers repeating, so π(3) = 8.
n = 8的Pisano周期为12,因此您正在寻找重复序列中第(1995%12)个元素,因此:
0 1 1 2 3 5 0 5 5 2 7 1
^
更新资料
如注释中所述,每增加一对,您都可以应用模以使数字易于管理:
function fib(n, mod)
{
if (n == 0) {
return 0;
} else if (n <= 2) {
return 1;
}
var current = 1,
tmp,
prev = 1;
while (n > 2) {
tmp = current;
current = (current + prev) % mod;
prev = tmp;
--n;
}
return current;
}
fib(1995, 8); // 2
内容总结
以上是互联网集市为您收集整理的javascript-如何找到一个很大的整数的余数全部内容,希望文章能够帮你解决javascript-如何找到一个很大的整数的余数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。