作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
两部分问题:
这是我在网上找到的素因数分解代码[注意:此代码不正确。请参阅下面 Stefan 的答案以获得更好的代码。]:
n = 600851475143
i = 2
while i * i < n:
while n % i == 0:
n = n / i
i = i + 1
print(n)
#takes about ~0.01secs
i = 1
while i < 100:
i += 1
#takes about ~3secs
最佳答案
这个问题是我搜索 "python prime factorization"
时弹出的第一个链接。正如@quangpn88 所指出的,对于诸如 n = 4, 9, 16, ...
之类的完美正方形,此算法错误 (!) 但是,@quangpn88 的修复确实也不起作用,因为如果最大的素数出现 3 次或更多次,例如 n = 2*2*2 = 8
或 n = 2*3*3,它将产生不正确的结果*3 = 54
.
我相信 Python 中正确的蛮力算法是:
def largest_prime_factor(n):
i = 2
while i * i <= n:
if n % i:
i += 1
else:
n //= i
return n
不要在性能代码中使用它,但它可以用于中等数量的快速测试:
In [1]: %timeit largest_prime_factor(600851475143)
1000 loops, best of 3: 388 µs per loop
如果寻求完整的素数分解,这是蛮力算法:
def prime_factors(n):
i = 2
factors = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors
关于Python 寻找质因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347174/
我只是写了下面的代码来利用筛法找到大于 2 的某个自然数的最大质因数。 该程序构建、运行并适用于较小的测试值,但对于大于 1000000 的值只会崩溃。 我自己写了这个——并且相信它可能会非常低效——
我是一名优秀的程序员,十分优秀!