Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使计算量减少?使用大量数据时效率非常低_Python - Fatal编程技术网

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