Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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 检查数字3^x*5^y的有效方法_Python_For Loop_Primes_Exponent - Fatal编程技术网

Python 检查数字3^x*5^y的有效方法

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

我想检查基于上下界的数字是否只有素数因子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):
        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 < /代码>。