def collatz_conjecture(num): if num % 2 == 0: return num // 2 else: return (3 * num + 1) // 2 n = int(input()) m = list(map(int, input().split())) result = set(m) for i in m: while i > 1: i = collatz_conjecture(i) result.discard(i) result = sorted(result, reverse=True) print(' '.join(map(str, result))) 优化上面的代码
时间: 2024-04-17 16:26:40 浏览: 98
Collatz-Conjecture:无人能解的最简单数学问题的直观表示。 (3N+1 问题)
对于上面的代码,可以进行一些优化来提高性能和简化逻辑。以下是一个优化后的版本:
```python
def collatz_conjecture(num):
if num % 2 == 0:
return num // 2
else:
return (3 * num + 1) // 2
n = int(input())
m = list(map(int, input().split()))
result = set(m)
covered_numbers = set()
for i in m:
while i > 1:
if i in covered_numbers:
break
i = collatz_conjecture(i)
covered_numbers.add(i)
result.discard(i)
result = sorted(result, reverse=True)
print(' '.join(map(str, result)))
```
这个优化的代码版本引入了一个新的集合 `covered_numbers`,用于记录已经计算过的数字。在每次计算后,我们将当前数字 `i` 加入到 `covered_numbers` 中,以便在后续的验证中避免重复计算。如果在递推过程中遇到了已经存在于 `covered_numbers` 中的数字,我们可以直接跳出循环,因为我们知道这个数会被其他数字所覆盖。
通过这个优化,我们可以减少不必要的计算和判断,提高代码的效率和简洁性。希望这个优化对你有帮助!如果还有其他问题,请随时提问。
阅读全文