📌  相关文章
📜  X的所有可能值的计数,使得A%X = B(1)

📅  最后修改于: 2023-12-03 14:48:39.978000             🧑  作者: Mango

X的所有可能值的计数,使得A%X = B

本题目的是要找到A除以X余数为B的X的所有可能值的个数。下面介绍一种方法,具体流程如下:

  1. 先用A除以B,如果不整除则直接返回0,否则继续下面的步骤。

  2. 将得到的商分解质因数,得到每个质因数的幂次。

  3. 对于每个质因数的幂次,可以选择是否把它包含在X中。例如,如果得到的质因数分解为2^3 * 3^2 * 5,则可以有以下几种包含2的幂次的情况:0、1、2、3。同理,对于3和5也是如此。

  4. 对于每个质因数的幂次,如果包含它的所有可能性都枚举完了之后,就可以得到所有可能的X值,将它们相乘就是答案。

下面是具体实现代码的片段,语言为Python:

def possible_x_count(a: int, b: int) -> int:
    if a % b != 0:
        return 0
    count = 1
    from collections import Counter
    factors = Counter()
    p = 2
    while p * p <= b:
        if b % p == 0:
            cnt = 0
            while b % p == 0:
                b //= p
                cnt += 1
            factors[p] = cnt
        p += 1
    if b > 1:
        factors[b] = 1
    for factor, count_in_b in factors.items():
        count_in_a = 0
        tmp = a
        while tmp % factor == 0:
            tmp //= factor
            count_in_a += 1
        count *= (count_in_b + 1 - count_in_a)
    return count

对于参数a和b,如果求得的结果不为0,则代表存在可能的X的值,返回的数值即为所有可能X的个数。

参考资料: 《算法竞赛进阶指南》 https://www.acwing.com/video/184/