gpt4 book ai didi

Python:简化棕色数字的代码

转载 作者:行者123 更新时间:2023-11-28 20:38:38 26 4
gpt4 key购买 nike

我很好奇你们中是否有人能想出一个更精简的代码来计算布朗数。目前,此代码可以执行 ~650!,然后再进行爬网。棕色数字是通过方程 n! + 1 = m**(2) 其中 M 是一个整数

brownNum = 8
import math
def squareNum(n):
x = n // 2
seen = set([x])
while x * x != n:
x = (x + (n // x)) // 2
if x in seen: return False
seen.add(x)
return True
while True:
for i in range(math.factorial(brownNum)+1,math.factorial(brownNum)+2):
if squareNum(i) is True:
print("pass")
print(brownNum)
print(math.factorial(brownNum)+1)
break
else:
print(brownNum)
print(math.factorial(brownNum)+1)
brownNum = brownNum + 1
continue

break
print(input(" "))

最佳答案

抱歉,我不明白您的代码背后的逻辑。

我不明白你为什么要计算math.factorial(brownNum) 4次相同的值brownNum每次通过while True环形。而在 for循环:

for i in range(math.factorial(brownNum)+1,math.factorial(brownNum)+2):

i 只会math.factorial(brownNum)+1的值

无论如何,这是我的 Python 3 代码,用于暴力搜索 Brown numbers .它很快找到仅有的 3 个已知对,然后继续在这台 2GHz 32 位机器上测试 1000 以下的所有其他数字,用时大约 1.8 秒。在那之后,您可以看到它变慢了(它在 20 秒标记附近达到 2000),但它会愉快地前进,直到阶乘变得太大而您的机器无法承受。

我将进度信息打印到标准错误,以便它可以与 Brown_number 对输出分开。此外,与 stdout 不同(至少在 Linux 上不需要),当您不打印换行符时,stderr 不需要刷新。

import sys

# Calculate the integer square root of `m` using Newton's method.
# Returns r: r**2 <= m < (r+1)**2
def int_sqrt(m):
if m <= 0:
return 0
n = m << 2
r = n >> (n.bit_length() // 2)
while True:
d = (n // r - r) >> 1
r += d
if -1 <= d <= 1:
break
return r >> 1

# Search for Browns numbers
fac = i = 1
while True:
if i % 100 == 0:
print('\r', i, file=sys.stderr, end='')
fac *= i
n = fac + 1
r = int_sqrt(n)
if r*r == n:
print('\nFound', i, r)
i += 1

关于Python:简化棕色数字的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40557900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com