gpt4 book ai didi

java - 查找具有 1000 位数字的斐波那契数的索引(PE #25)

转载 作者:行者123 更新时间:2023-11-29 04:58:18 25 4
gpt4 key购买 nike

我有两种算法来打印第一个 1000 位的斐波那契数,但似乎我遗漏了一些东西。

算法 1

public class ab{
public static void main(String[] args){
float phi = (float) 1.618033989;
float curr = 1;
float noOfDigits = 0;
float ans;
float fiveSqrt = (float) Math.sqrt(5);
while(noOfDigits< 1001){
noOfDigits = (curr*Math.log10(phi)) - Math.log10(fiveSqrt);
System.out.println("curr : " + curr + "Digits : " + Math.round(noOfDigits));
curr++;
}
}
}

输出

它的输出很长,但最后是:

curr : 4781.0Digits : 999
curr : 4782.0Digits : 999
curr : 4783.0Digits : 999
curr : 4784.0Digits : 999
curr : 4785.0Digits : 1000
curr : 4786.0Digits : 1000
curr : 4787.0Digits : 1000
curr : 4788.0Digits : 1000
curr : 4789.0Digits : 1000
curr : 4790.0Digits : 1001

看来,4785 就是答案,但是啪!这是不正确的。所以我通过反向求解 Wolfram 方程尝试了一种更数学的方法。

ans = (1000 + (float) Math.log10(fiveSqrt))/ (float) Math.log10(phi);
System.out.println(ans);

输出:4786.6445又是一样的。我错过了什么吗?

最佳答案

阅读this教程以获得完整的理解。你误解了算法,你使用了 Math.round(noOfDigits) 这是不正确的,你应该做的是:

  1. 计算 noOfDigits,就像您在算法中所做的那样
  2. 提取整数部分。
  3. 给它加'1'。

    long roundedNumber;
    while(noOfDigits< 1001){
    noOfDigits = (curr*Math.log10(phi)) - Math.log10(fiveSqrt);
    roundedNumber = (long)noOfDigits + 1;
    System.out.println("curr : " + curr + "Digits : " + Math.round(roundedNumber));
    curr++;
    }

    这给了我答案:4782.0 这是正确的。

关于java - 查找具有 1000 位数字的斐波那契数的索引(PE #25),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32930274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com