2
我在使用dotnetfiddle來解決一些練習題時,遇到了一些非常奇怪的事情。我有一個應用數學序列(不同的計算每一個步驟取決於當前步驟是偶數或奇數)的程序:C# - 相同的計算更慢使用Int vs Long?
using System;
public class Program
{
public static void Main()
{
int ceiling = 1000000;
int maxMoves = 0;
int maxStart = 0;
int testNumber;
for(int i = 1; i <= ceiling; i++){
testNumber = i;
int moves = 1;
while(testNumber != 1){
if(testNumber % 2 == 0){
testNumber = testNumber/2;
moves++;
} else {
testNumber = (3 * testNumber) + 1;
moves++;
}
}
if(moves > maxMoves){
maxMoves = moves;
maxStart = i;
}
}
Console.WriteLine(maxStart);
Console.WriteLine(maxMoves);
}
}
書面,執行時間限制被突破。但是,如果我改變的測試號聲明的長而不是一個整數,程序運行:
int maxMoves = 0;
int maxStart = 0;
**long** testNumber;
爲什麼會做出這種改變,這就需要從int
重鑄i
到long
對的每個增量循環(在testNumber = i
),比將此作爲int
更快?在long
值上執行數學運算更快嗎?
非常感謝!是的,那是Collatz。 – sadq3377