找到1000位数的斐波那契数的指数(PE#25)

时间:2015-10-04 05:14:04

标签: java

我有两种算法用于打印1000个数字的第一个斐波那契数字,但似乎我错过了一些东西。

<li>

Algo 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++; } } }

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

Output

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

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

输出:ans = (1000 + (float) Math.log10(fiveSqrt))/ (float) Math.log10(phi); System.out.println(ans); 再说一遍。我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

阅读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哪个是正确的。