小编Rei*_*ius的帖子

我计算非常大的斐波那契数模的算法太慢

目标是计算F(n)模m(m等于10的幂5),其中n可能真的很大:最多10的幂18。

我的算法太慢了。

我的方法:计算并存储所有不超过m的斐波那契数,然后遍历该数组并对斐波那契数取模。

一旦找到pisano周期的长度,我就可以使用该长度来计算任何 F(n)

我的代码:

import java.math.BigInteger;
import java.util.*;

public class FibonacciAgain {


    private static ArrayList<BigInteger> calc_fib() {
        ArrayList<BigInteger> fib = new ArrayList<>();

        fib.add(BigInteger.ZERO);
        fib.add(BigInteger.ONE);
        for (int i = 2; i <= 100000; i++) {
            fib.add(fib.get(i - 2).add(fib.get(i - 1)));

        }
        return fib;
    }

    private static long calculatePeriod(ArrayList<BigInteger> fib, long modulo) {

        long periodLength = 0;
        boolean periodFound = false;
        long[] period = new long[1000000];
        period[0] = 0;
        period[1] = 1;
        period[2] = 1;


        int i = 3;
        while …
Run Code Online (Sandbox Code Playgroud)

java algorithm

6
推荐指数
1
解决办法
176
查看次数

标签 统计

algorithm ×1

java ×1