📅  最后修改于: 2023-12-03 14:48:39.978000             🧑  作者: Mango
本题目的是要找到A除以X余数为B的X的所有可能值的个数。下面介绍一种方法,具体流程如下:
先用A除以B,如果不整除则直接返回0,否则继续下面的步骤。
将得到的商分解质因数,得到每个质因数的幂次。
对于每个质因数的幂次,可以选择是否把它包含在X中。例如,如果得到的质因数分解为2^3 * 3^2 * 5,则可以有以下几种包含2的幂次的情况:0、1、2、3。同理,对于3和5也是如此。
对于每个质因数的幂次,如果包含它的所有可能性都枚举完了之后,就可以得到所有可能的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/