A
给予A = X^Y
一些积极的X
和Y
。
约束:
1 <= Y <= 30000
1 <= X <= 1000000000 (10^9)
测试用例
X = 2 and Y = 2.
Minimum value of B is 4 (as B! = 4! = 24, A = X^Y = 4 and B! % A = 24 % 4 = 0)
X = 2 and Y = 3.
Minimum value of B is 4 (as B! = 4! = 24, A = X^Y = 8 and B! % A = 24 % 8 = 0)
X = 1000000000 and Y = 30000.
Minimum value of B is 1080015
答案 0 :(得分:3)
你可以考虑因素X^Y
。第一因素X
:
X = p1^e1 * ... * pk^ek
然后X^Y
将是:
X^Y = p1^(e1*Y) * ... * pk^(ek*Y)
然后您可以二分搜索B
:对于固定值,找出p
中X^Y
的每个素因子B!
出现的次数。这等于:
floor(B / p) + floor(B / (p^2)) + ...
你可以这样实现:
count(B, p):
s = 0
while B != 0:
s += B / p
B /= p
return s
如果此函数为>= ei*Y
的每个素因子pi
返回X^Y
,则此B
值是可行的:减少下半部分的搜索以查看是否可以找一个较小的。否则,将搜索减少到上半部分。
问题陈述说B
将适合整数,让我们假设一个64位。这意味着二进制搜索的最多64
次迭代。截至X
的{{1}} 10^9
只有大约20
个素因子,count
函数在O(log B)
中运行。所以期望围绕64*20*64
运算,加上初始分解所需的几个运算。应该跑得很快。