在 Python 中检查一个数是不是另一个数的整数次幂

在本文中,我们可以编程检查一个数是不是另一个数的整数次幂。用户给出两个正整数 m、n,检查 m 是否等于 n^x,其中 x 可以是零或整数。

示例:

# 输入:
请输入第一个数 m9
请输入第二个数 n3

# 输出:
9  3 的整数次幂

使用 log()

log() 返回一个数的自然对数。

语法:

import math

math.log(x[, base])

参数:

x -- 数值表达式。

base -- 可选,底数,默认为 e。

from math import log
m = int(input("请输入第一个数 m:"))
n = int(input("请输入第二个数 n:"))
logvalue = log(m, n)
if int(logvalue) == logvalue:
    print(f"{m}{n} 的整数次幂。")
else:
    print(f"{m} 不是 {n} 的整数次幂。")

使用 while循环

使用 while循环,计算 m 被 n 取余,如果余数不为 0,则 m 不是 n 的整数次幂。计算 m 被 n 整除,如果整除的结果被 n 取余,余数不为 0,则 m 不是 n 的整数次幂。循环计算,直到 m 为 1,则 m 是 n 的整数次幂。

语法格式:

def check(m, n):
    if m == 0:
        return False
    while m != 1:
        if m % n != 0:
            return False
        m = m // n
    return True
m = int(input("请输入第一个数 m:"))
n = int(input("请输入第二个数 n:"))
if check(m, n):
    print(f"{m}{n} 的整数次幂。")
else:
    print(f"{m} 不是 {n} 的整数次幂。")

检查是不是 2 的整数次幂

检查一个数是不是 2 的整数次幂,一种巧妙的方法是使用位运算。

2的整数次幂的二进制:

2 -------- 10
4 -------- 100
8 -------- 1000
16 ------- 10000
32 ------- 100000

2的整数次幂的二进制除了首位为 1,其它位置都为 0。

2的整数次幂减 1 的二进制:

1 -------- 01
3 -------- 011
7 -------- 0111
16 ------- 01111
32 ------- 011111

2的整数次幂减 1 的二进制除了首位为 0,其它位置都为 1。

两者做与运算,可以得到 0。利用以上这个特性,可以检查一个数是不是 2 的整数次幂。

def check(m):
        return m and (not(m & (m-1)))
m = int(input("请输入一个数 m:"))
if check(m):
    print(f"{m} 是 2 的整数次幂。")
else:
    print(f"{m} 不是 2 的整数次幂。")

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!