Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 优化Collatz序列_Java_Optimization - Fatal编程技术网

Java 优化Collatz序列

Java 优化Collatz序列,java,optimization,Java,Optimization,我一直在project-euler.net上努力 我最近解决了问题14-请参阅完整描述 这是密码 public static void findHighestCollatzNumber() { long greatestNumberOfTerms=0; long highestTermNumber=0; for(int i=1;i<=ONE_MILLION;i++) { long noOfTerms=getNumberOfCollatzTer

我一直在project-euler.net上努力

我最近解决了问题14-请参阅完整描述

这是密码

public static void findHighestCollatzNumber()
{
    long greatestNumberOfTerms=0;
    long highestTermNumber=0;
    for(int i=1;i<=ONE_MILLION;i++)
    {
        long noOfTerms=getNumberOfCollatzTerms(i);
        if(noOfTerms>greatestNumberOfTerms)
        {
            greatestNumberOfTerms=noOfTerms;
            highestTermNumber=i;
        }
    }
    System.out.println("highest number of term "+greatestNumberOfTerms + " for "+highestTermNumber);
}

public static long getNumberOfCollatzTerms(long n)
{
    long numberOfTerms=1;
    long i=n;
    do
    {
        i=calculateCollatz(i);
        if(i>0)
        {
            numberOfTerms++;
        }   
    }
    while(i!=1 && i>0);
    return numberOfTerms;
}


public static long calculateCollatz(long n)
{
    long collatz=0;
    if(n%2==0)
    {
        collatz=n>>1;
    }
    else
    {
        collatz=(n<<1)+1+n;
    }
    return collatz;
}
public static void findHighestCollatzNumber()
{
long greatestNumberOfTerms=0;
长最高位术语编号=0;
for(int i=1;igreatestNumberOfTerms)
{
greatestNumberOfTerms=中午;
最高终端数=i;
}
}
System.out.println(“术语的最大数量”+最大术语数+”表示“+最大术语数”);
}
公共静态长getNumberOfCollatzTerms(长n)
{
长numberOfTerms=1;
长i=n;
做
{
i=计算坐标z(i);
如果(i>0)
{
numberOfTerms++;
}   
}
而(i!=1&&i>0);
返回术语编号;
}
公共静态长计算器(长n)
{
长collatz=0;
如果(n%2==0)
{
collatz=n>>1;
}
其他的
{
collatz=(n您需要使用a来避免多次重新计算相同的数字。检查HashMap是否已包含该数字是一个快速过程,可以节省许多步骤

例如:
如果你第二次达到200000这个数字,你已经知道Collatz序列中还有多少个步骤。

将以前计算的结果存储在一个数据结构中,而不是每次都重新计算。但是这不是200000的特定数字,而不是另一个数字UB1-O-8:是的,但是你已经知道有多少个步骤了你花了很长时间才得到那个数字。在这一点上,这只是一个加法问题。