Python 如何使计算量减少?使用大量数据时效率非常低
首先,对循环使用Python 如何使计算量减少?使用大量数据时效率非常低,python,Python,首先,对循环使用。然后,让Python为您递增,并去掉不必要的rem变量。此代码与您的代码完全相同,只是采用了“Pythonic”的方式 xrange(x,y)返回一个生成器,用于从x到但不包括y的所有整数。对于循环,首先使用。然后,让Python为您递增,并去掉不必要的rem变量。此代码与您的代码完全相同,只是采用了“Pythonic”的方式 xrange(x,y)返回从x到但不包括y的所有整数的生成器。研究。研究。以便打印出一个数字的所有因子?第一个明显的优化是,当事实*2大于num时,您可
。然后,让Python为您递增,并去掉不必要的rem
变量。此代码与您的代码完全相同,只是采用了“Pythonic”的方式
xrange(x,y)
返回一个生成器,用于从x到但不包括y的所有整数。对于循环,首先使用。然后,让Python为您递增,并去掉不必要的rem
变量。此代码与您的代码完全相同,只是采用了“Pythonic”的方式
xrange(x,y)
返回从x到但不包括y的所有整数的生成器。研究。研究。以便打印出一个数字的所有因子?第一个明显的优化是,当事实*2大于num时,您可以退出。任何大于num一半的都不能成为一个因素。这是立即扔掉的工作量的一半
第二,你最好搜索素因子分解,并从中导出所有可能的因子。对于这类事情,有一大堆公式。这样就可以打印出一个数字的所有因子了吗?第一个明显的优化是,当事实*2大于num时,您可以退出。任何大于num一半的都不能成为一个因素。这是立即扔掉的工作量的一半
第二,你最好搜索素因子分解,并从中导出所有可能的因子。这类事情有很多方法。一旦你走到一半(一次事实>num/2),你就不会发现任何新的数字,因为num/2以上的数字可以通过计算每个数字的num/fact来发现(这也可以用来轻松打印每个数字及其对)
下面的代码应该在每次计算时将时间缩短几秒钟,并在num为奇数时将其减半。希望你能理解它,如果没有,请询问。
如果我以后想点什么的话,我会补充更多
num = input()
for x in xrange(1, num):
if (num % x) == 0:
print fact
def偶数(num):
“偶数可以被奇数除,所以请全部测试”
事实=0
虽然事实一旦到达一半(一旦事实>num/2),您就不会发现任何新的数字,因为num/2以上的数字可以通过计算每个数字的num/fact来发现(这也可以用于轻松打印每个数字及其配对)
下面的代码应该在每次计算时将时间缩短几秒钟,并在num为奇数时将其减半。希望你能理解它,如果没有,请询问。
如果我以后想点什么的话,我会补充更多
num = input()
for x in xrange(1, num):
if (num % x) == 0:
print fact
def偶数(num):
“偶数可以被奇数除,所以请全部测试”
事实=0
而事实是的。使用
肖尔的算法是以数学家彼得·肖尔的名字命名的量子算法
整数的算法(在量子计算机上运行的算法)
因子分解于1994年制定。非正式地说,它解决了以下问题
问题:给定一个整数N,求它的素因子
在量子计算机上,为了计算整数N,Shor的算法运行
多项式时间(所用时间为对数N的多项式,即
输入的大小)。具体而言,它需要时间O((日志N)3),
证明整数因式分解问题可以
在量子计算机上有效地求解,因此具有复杂性
BQP类。这比已知的最有效的方法要快得多
经典的因式分解算法,一般数域筛,其中
在次指数时间内工作-约为O(e1.9(对数N)1/3(对数
N) 2/3)。Shor算法的效率取决于效率
量子傅里叶变换的模幂运算
平方
对。使用
肖尔的算法是以数学家彼得·肖尔的名字命名的量子算法
整数的算法(在量子计算机上运行的算法)
因子分解于1994年制定。非正式地说,它解决了以下问题
问题:给定一个整数N,求它的素因子
在量子计算机上,为了计算整数N,Shor的算法运行
多项式时间(所用时间为对数N的多项式,即
输入的大小)。具体而言,它需要时间O((日志N)3),
证明整数因式分解问题可以
在量子计算机上有效地求解,因此具有复杂性
BQP类。这比已知的最有效的方法要快得多
经典的因式分解算法,一般数域筛,其中
在次指数时间内工作-约为O(e1.9(对数N)1/3(对数
N) 2/3)。Shor算法的效率取决于效率
量子傅里叶变换的模幂运算
平方
您只需要转到输入数字的平方根就可以得到所有的因子(不像其他地方建议的那样,不到数字的一半)。例如,24具有因子1、2、3、4、6、8、12、24。sqrt(24)约为4.9。检查1和24,检查2和12,检查3和8,检查4和6。因为5>4.9,所以不需要检查它。(是的,我知道24不是最好的例子,因为所有小于sqrt(24)的整数都是24的因子。)
有一些非常复杂的方法可以更好地处理大量数据,但这应该会让您在运行时得到相当好的改进。根据您的应用程序,缓存还可以节省大量时间。您只需转到输入数字的平方根即可获得所有因子(如其他地方所建议的,不到数字的一半)。例如,24具有因子1、2、3、4、6、8、12、24。sqrt(24)约为4.9。检查1和24,检查2和12,检查3和8,检查4和6。因为5>4.9,所以不需要检查它。(是的,我知道24不是最好的例子,因为所有小于sqrt(24)的整数都是24的因子。)
有一些非常复杂的方法可以更好地处理大量数据,但是
def even(num):
'''Even numbers can be divided by odd numbers, so test them all'''
fact=0
while fact<num/2:
fact+=1
rem=num % fact
if rem == 0:
print '%s and %s'%(fact,num/fact)
def odd(num):
'''Odd numbers can't be divided by even numbers, so why try?'''
fact=-1
while fact<num/2:
fact+=2
rem=num % fact
if rem == 0:
print '%s and %s'%(fact,num/fact)
while True:
num=input(':')
if str(num)[-1] in '13579':
odd(num)
else:
even(num)
factors = set()
for i in xrange(math.floor(math.sqrt(x))+1):
if x % i == 0:
factors.add(i)
factors.add(x/i)
print factors
# even number
fact = 0
while 1:
fact += 1
fact2, rem = divmod(num, fact)
if not rem:
yield fact
yield fact2
if fact >= fact2 - 1:
# fact >= math.sqrt(num)
break