我制作了一个程序,打印出一个数字列表,每个数字都有一个步骤(根据Collatz猜想)需要比前一个更多的步骤:
limit = 1000000000
maximum = 0
known = {}
for num in xrange(2, limit):
start_num = num
steps = 0
while num != 1:
if num < start_num:
steps += known[num]
break;
if num & 1:
num = (num*3)+1
steps += 1
steps += 1
num //= 2
known[start_num] = steps
if steps > maximum:
print start_num,"\t",steps
maximum = steps
Run Code Online (Sandbox Code Playgroud)
我缓存了我已经知道的结果来加速程序.这种方法可以达到10亿的限制,我的计算机内存不足(8GB).
先感谢您.
我正在尝试将BigInteger数转换为二进制数.我使用while循环来减少BigInteger,直到它等于1,在循环运行时取余数.
循环的条件是:(decimalNum.intValue()> 1).
但程序只进行一次循环然后认为BigInteger小于/等于1,而实际上它大约是55193474935748.为什么会发生这种情况?
("inBinary"是一个ArrayList,用于保存循环中的余数.)
这是while循环:
while (decimalNum.intValue()>1){
inBinary.add(0, decimalNum.mod(new BigInteger("2")).intValue()); //Get remainder (0 or 1)
decimalNum = decimalNum.divide(new BigInteger("2")); //Reduce decimalNum
}
Run Code Online (Sandbox Code Playgroud) algorithm ×1
biginteger ×1
caching ×1
collatz ×1
conditional ×1
java ×1
math ×1
optimization ×1
python ×1
while-loop ×1