Python 优化代码以找到可被1-20之间的所有整数整除的最小数

Python 优化代码以找到可被1-20之间的所有整数整除的最小数,python,math,divide,Python,Math,Divide,我目前正试图解决一个问题:“能被1到20的所有数字平均整除的最小正数是多少?” 到目前为止,我已经编写了一些似乎有效,但需要很长时间的代码。此外,我不得不在if中使用大量的“and”语句,这似乎既不太有效也不专业 我能做些什么来优化这段代码并使它更整洁呢 number = 1 result = 0 def divide(candidate): if candidate % 2 == 0 and candidate % 3 == 0 and candidate % 4 == 0 and

我目前正试图解决一个问题:“能被1到20的所有数字平均整除的最小正数是多少?”

到目前为止,我已经编写了一些似乎有效,但需要很长时间的代码。此外,我不得不在if中使用大量的“and”语句,这似乎既不太有效也不专业

我能做些什么来优化这段代码并使它更整洁呢

number = 1
result = 0

def divide(candidate):
    if candidate % 2 == 0 and candidate % 3 == 0 and candidate % 4 == 0 and candidate % 5 == 0 and candidate % 6 == 0 and candidate % 7 == 0 and candidate % 8 == 0 and candidate % 9 == 0 and candidate % 10 == 0 and candidate % 11 == 0 and candidate % 12 == 0 and candidate % 13 == 0 and candidate % 14 == 0 and candidate % 15 == 0 and candidate % 16 == 0 and candidate % 17 == 0 and candidate % 18 == 0 and candidate % 19 == 0 and candidate % 20 == 0:
        global result
        result = 1
        return 1

    else:
       global number
        result = 0
        number = number + 1
        return 0

while result == 0:
divide(number)

print "The lowest number divisible by all integers between 1-20 is:", number

澄清一下,这不是家庭作业,我正在自学Python,并尝试解决一些问题作为其中的一部分。

这里一个非常简单但非常有效的方法是只使用素数及其幂。你为什么要考虑他们的乘法,对吧?将“and”条件减少到只有4,9,16,5,7,11,13,17,19

这里一个非常简单但非常有效的方法是只使用素数及其幂。你为什么要考虑他们的乘法,对吧?将“和”条件减少到4,9,16,5,7,11,13,17,19

您可以从消除以前数字的因数开始。所有能被4整除的数字都能被2整除。所有可被10整除的数字都可被5整除,所有可被9整除的数字都可被3整除,以此类推。

您可以从消除以前数字的因数开始。所有能被4整除的数字都能被2整除。所有能被10整除的数字都能被5整除,所有能被9整除的数字都能被3整除,等等。

如果是我的话,我会尝试对素数进行“mod”(%)运算。我不会使用从1到20的每一个数字。

如果是我,我会尝试“修改”(%)素数。我不会使用从1到20的每一个数字。

你的问题不需要计算机的帮助就可以很容易地解决,因此优化后的版本只需打印答案即可。很难说出你认为可以接受的优化量。

下面是如何在没有电脑的情况下解决这个问题。可被1到20之间的所有数整除的最小数必须能被这些数中出现的所有素数幂整除。另一方面,如果我们有一个可以被这个范围内所有素数幂整除的数,它可以被1到20的所有数整除。因为具有不同基的素数幂是互质的,所以这个范围内每个素数的所有最高素数幂的乘积就是答案。下面是优化后的代码:

print 2**4 * 3**2 * 5 * 7 * 11 * 13 * 17 * 19

您的问题可以很容易地解决,而无需计算机的帮助,因此优化版本只需打印答案。很难说出你认为可以接受的优化量。

下面是如何在没有电脑的情况下解决这个问题。可被1到20之间的所有数整除的最小数必须能被这些数中出现的所有素数幂整除。另一方面,如果我们有一个可以被这个范围内所有素数幂整除的数,它可以被1到20的所有数整除。因为具有不同基的素数幂是互质的,所以这个范围内每个素数的所有最高素数幂的乘积就是答案。下面是优化后的代码:

print 2**4 * 3**2 * 5 * 7 * 11 * 13 * 17 * 19


这是家庭作业吗?提示:你真的需要检查1到20之间的所有数字的整除性吗?如果一个数字可以被2和3整除,那么1和20之间还有什么其他数字可以被2和3整除呢?这不是家庭作业,我只是在学术之外自学python。说得好,谢谢!你可能对谷歌搜索“最小公倍数”感兴趣。你的算法错了。请参阅C中的解决方案。这是家庭作业吗?提示:你真的需要检查1到20之间的所有数字的整除性吗?如果一个数字可以被2和3整除,那么1和20之间还有什么其他数字可以被2和3整除呢?这不是家庭作业,我只是在学术之外自学python。说得好,谢谢!你可能对谷歌搜索“最小公倍数”感兴趣。你的算法错了。请参阅C中的解决方案。小心:仅仅因为你可以被2整除并不意味着你可以被4、8或16整除。小心:仅仅因为你可以被2整除并不意味着你可以被4、8或16整除。谢谢,我将快速更改代码以反映这一点。如果没有15个左右的“and”在if中,有没有办法做到这一点?@c3ntury-将所有的数字放入一个列表中,然后遍历列表并测试每个数字。谢谢,我会快速更改代码以反映这一点。如果没有15个左右的“和”在if范围内,有没有办法做到这一点?@c3ntury-将所有的数字放在一个列表中,然后迭代列表并测试每个数字。哇,这真是优化了!有一件事我不太明白,当你说‘每个素数的最高素数幂次’:/@c3ntury:读作“对于1到20范围内的每个素数,取这个素数在这个范围内的最高幂次。”啊,你得到24,因为这等于16,32,因为这等于9?你为什么不把16和9放进去s@c3ntury当前位置一开始我甚至不知道,但后来我想这样可能会更清楚。显然我错了“这个范围内每个素数的所有最高素数幂的乘积就是答案”-提到如何找到指数(“素数幂”)是很有帮助的。如果
p
是我们的素数(例2),
n
是我们的最大值(例20),那么指数就是
floor(log\u p(n))
。通过筛选可以找到素数本身。哇,这真是优化了!有一件事我不太明白,当你说‘每个素数的最高素数幂次’:/@c3ntury:读作“对于1到20范围内的每个素数,取这个素数在这个范围内的最高幂次。”啊,你得到24,因为这等于16,32,因为这等于9?你为什么不把16和9放进去s@c3ntury当前位置一开始我甚至不知道,但后来我想这样可能会更清楚。显然我错了“eac的所有最高素数幂的乘积