需要证明以下提到的CHAPD解决方案

时间:2015-05-21 19:28:23

标签: algorithm

问题链接: http://www.codechef.com/problems/CHAPD/
说明:

You are given two positive integers – A and B. 
You have to check whether A is divisible by all the prime divisors of B.

我的朋友告诉我这个解决方案,但我无法理解这个解决方案背后的逻辑:
解:

import sys
t=int(sys.stdin.readline())
for _ in range(t):
    a,b=map(int,sys.stdin.readline().split())
    if (a**65)%b==0:
        print "Yes"
    else:
        print "No"

在观察了这个解决方案后,我无法理解为什么作者选择值“65”当我试图测试极值时,即10 ^ 18,10 ^ 18它在PC上给出了内存错误。
我测试用一些随机值替换值65 64,61,45,33和17 所以我发现,对于值17,一个测试用例没有通过,而其他值代码AC为所有值。
您可能会看到提交的内容here 我只想知道这个解决方案的证明。
谢谢!

1 个答案:

答案 0 :(得分:3)

此解决方案依赖于输入值限制。 B < 10**18 =&gt; B < 2**60,因此B因子分解中的任何素数除数都低于60.然后如果A具有B的所有素数除数,则A**60必须可以被B整除,如果A**60可以被B分割,则它具有所有它的主要除数,因此A也是如此。