Python 检查数字3^x*5^y的有效方法
我想检查基于上下界的数字是否只有素数因子3和5,并且数字应该是3的幂和5的幂的乘积。我目前的解决办法是这样。我想优化它,因为在我看来,用for循环检查幂并不是一个好方法。提前谢谢Python 检查数字3^x*5^y的有效方法,python,for-loop,primes,exponent,Python,For Loop,Primes,Exponent,我想检查基于上下界的数字是否只有素数因子3和5,并且数字应该是3的幂和5的幂的乘积。我目前的解决办法是这样。我想优化它,因为在我看来,用for循环检查幂并不是一个好方法。提前谢谢 def checkNum(x): for i in range(1,50): for j in range(1,50): return x == (3**i) * (5**j) def printResult(l, r): for i in range(l,r
def checkNum(x):
for i in range(1,50):
for j in range(1,50):
return x == (3**i) * (5**j)
def printResult(l, r):
for i in range(l,r):
if checkNum(i):
print(i)
根据评论,我认为这是最好的方式:
def checkNum(x):
while x%3==0:
x = x //3
while x%5==0:
x = x//5
return x==1
我想对它进行优化,因为用for循环检查电源并不好
在我看来是这样的
在一系列随机数中,我们通过执行以下操作来提高其速度:
def checkNum0(x):
if x % 2 == 0: # eliminate half the numbers in one test!
return False
while x % 15 == 0: # speed up the process
x = x // 15
while x % 5 == 0:
x = x // 5
while x % 3 == 0:
x = x // 3
return x == 1
或者我们可以使用嵌套循环并将两个分区合并为一个:
def checkNum(x):
if x % 2 == 0: # eliminate half the numbers in one test!
return False
for divisor in (15, 5, 3):
while (quotient_remainder := divmod(x, divisor))[1] == 0:
x = quotient_remainder[0]
return x == 1
你能想出一种方法来代替重复的除法/模运算吗?你通常如何用手解决这个问题?只要这个数字可以被3整除,就重复被3整除。重复被5除,只要这个数字可以被5除。“你还有1个吗?”弗兰克耶林,这就是你的意思?def checkNum(x):当x%3==0:x=x//3而x%5==0:x=x//5返回x==1@FrankYellin这可能是一个更有效的循环,但它仍然是一个循环。如果i%3==0和i%5==0,则对
的测试将排除x
或y
为零的一些候选项。例如,考虑<代码> i=9 < /代码>。