我一直在工作我的方式在project-euler.net優化在Collatz序列
我最近解決的問題14-請參閱here的完整描述
下面是代碼
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;
}
它給出了正確的輸出,但它需要大量的時間進行計算
我也嘗試使用按位運算來獲得更快的輸出,但仍需要時間,我怎樣才能減少它?
我已經看過其他的解決方案,但其中大部分都是用於ghc或C++或Python。
將以前計算的結果存儲在數據結構中,而不是每次重新計算它們。 –