Java 优化Collatz序列
我一直在project-euler.net上努力 我最近解决了问题14-请参阅完整描述 这是密码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
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:是的,但是你已经知道有多少个步骤了你花了很长时间才得到那个数字。在这一点上,这只是一个加法问题。