📜  在序列中查找第N个数字,该数字不是给定数字的倍数(1)

📅  最后修改于: 2023-12-03 15:23:32.717000             🧑  作者: Mango

在序列中查找第N个数字,该数字不是给定数字的倍数

有一个序列,要求在其中查找第N个数字,该数字不是给定数字的倍数。这个问题可以用计数法或者判断法实现。

计数法

计数法的思路是,从1开始遍历每个数字,计算目前为止出现的不是给定数字倍数的数字个数,当达到N时,返回此时的数字。

def find_nth_not_multiple(n: int, m: int) -> int:
    count = 0
    num = 0
    while True:
        num += 1
        if num % m != 0:
            count += 1
            if count == n:
                return num
判断法

判断法的思路是,从1开始遍历每个数字,判断是否是给定数字的倍数,如果不是,计数器加1;如果是,继续下一个数字。当计数器达到N时,返回此时的数字。

def find_nth_not_multiple(n: int, m: int) -> int:
    count = 0
    num = 0
    while True:
        num += 1
        if num % m != 0:
            count += 1
        if count == n:
            return num

以上两种方法的时间复杂度都为O(N),因为它们要遍历N个数字才能找到答案。但是,判断法需要进行更多的判断操作,所以速度稍微慢一些。如果N很大,可以考虑优化算法,但是这里不做展开。