最长的Collat​​z序列

时间:2012-11-01 20:39:11

标签: algorithm numbers sequence collatz highest

在执行我要实现Collatz Conjecture的Java作业时,我想到了一个不同的目标,即找到最长的Collat​​z序列。我的程序计算步骤如下:

public class Collatz {

static int count = 0;

    static void bilgi (int n){

        int result = n;
        System.out.println("Result: "+result+ " Step: "+count);

        if (result <= 1) {
            result = 1;
        } else if (result%2 == 0){
            result = result/2;
            count = count + 1;
            bilgi(result);

        } else {
            result = (result*3)+1;
            count = count + 1;
            bilgi(result);
        }
    }

    public static void main(String[] args) {
        bilgi(27);
    }

}

我想找到最高步数。

4 个答案:

答案 0 :(得分:2)

任何初始起始数低于1亿的最长进展为63,728,127,其中有949步。对于不到10亿的起始数字,它是670,617,279,有986步,对于不到100亿的数字,它是9,780,657,630,有1132步

来源:http://en.wikipedia.org/wiki/Collatz_conjecture

答案 1 :(得分:1)

static int bilgi(int n) {
    int result = n;
    if (result <= 1) return 1;
    if (result % 2 == 0) return 1+bilgi(result/2);
    return 1+bilgi(3*result+1);
}

然后你收集bilgi(i)个电话的结果并选择最大值。

答案 2 :(得分:0)

如果您要查找1到100之间的最大值,则可以替换:

public static void main(String[] args) {
    bilgi(27);
}

with:

public static void main(String[] args) {

    static int maxcountsofar = 0;
    static int start = 0;
    static int thisone = 0;
    for (int iloop = 1; iloop <= 100; iloop++)
    {
       thisone = bilgi(iloop);
       if (thisone > maxcountsofar)//if this one is bigger than the highest count so far then
      {
        start = iloop;//save this information as best so far
        maxcountsofar = thisone;
      }
    }
    System.out.println("Result: " + start.Tostring() + " Step: " + maxcountsofar.Tostring() );
    //I know this is a really old post but it looked like fun.

}

/ * 另外,从bilgi()函数中取出println(),它会为遇到的每个步骤生成一行,这将是毫无价值且非常耗时的。

使用Vesper的bigli(),因为它比你的快得多。 * /

答案 3 :(得分:0)

我知道这是一个老问题,但我只是在解决它,我会建议任何人这样做,只是使用一个arraylist并获得.size(),我这样做,因为我想看到价值观也是如此。