from math import sqrt, ceil, floor
print(next(x for x in range(ceil(sqrt(10 ** 7)), floor(sqrt(10 ** 8 - 1))) if x == (x * x) % 10000))
打印:
^{pr2}$
时间安排:
%timeit next(x for x in range(ceil(sqrt(10 ** 7)), floor(sqrt(10 ** 8 - 1))) if x == (x * x) % 10000)
546 µs ± 32.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
@theausome的答案(最短的(字符):
%timeit next((x for x in range(3163, 10000) if str(x*x)[-4:] == str(x)), None)
3.09 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
@jpp的回答(最快):
import numpy as np
from numba import jit
@jit(nopython=True)
def find_result():
for x in range(1e7**0.5, 1e9**0.5):
i = x**2
if i % 1e4 == x:
return (x, i)
%timeit find_result()
61.8 µs ± 1.46 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
import numpy as np
from numba import jit
@jit(nopython=True)
def find_result():
for x in range(1e7**0.5, 1e9**0.5):
i = x**2
if i % 1e4 == x:
return (x, i)
print(find_result())
# (9376, 87909376)
[几乎]一衬:
打印:
^{pr2}$时间安排:
@theausome的答案(最短的(字符):
@jpp的回答(最快):
下面是一个不带任何模块的1-liner解决方案:
如果考虑从
^{pr2}$1000
到3162
的数字,它们的平方表示一个7
位数。因此,从3163
迭代会更优化,因为平方应该是8
位数字。感谢@adrin给出了这么好的观点。在如果您喜欢使用第三方库,可以使用
numpy
。此版本与numba
结合进行优化。在相关问题 更多 >
编程相关推荐