Algorithm 需要以下提到的CHAPD解决方案的证明
问题链接:Algorithm 需要以下提到的CHAPD解决方案的证明,algorithm,Algorithm,问题链接: 说明: You are given two positive integers – A and B. You have to check whether A is divisible by all the prime divisors of B. 给你两个正整数——A和B。 你必须检查A是否能被B的所有素数整除。 一位朋友告诉我这个解决方案,但我无法理解这个解决方案背后的逻辑: 解决方案: 导入系统 t=int(sys.stdin.readline()) 对于范围(t)内的uu:
说明: You are given two positive integers – A and B. You have to check whether A is divisible by all the prime divisors of B. 给你两个正整数——A和B。 你必须检查A是否能被B的所有素数整除。 一位朋友告诉我这个解决方案,但我无法理解这个解决方案背后的逻辑:
解决方案:
导入系统 t=int(sys.stdin.readline()) 对于范围(t)内的uu: a、 b=map(int,sys.stdin.readline().split()) 如果(a**65)%b==0: 打印“是” 其他: 打印“否”
在观察了这个解决方案后,我无法理解当我尝试测试极值时,为什么作者选择了值“65”,即10^18,10^18,它在PC上给出了内存错误。
我测试了用一些随机值替换值65 64、61、45、33和17,所以我发现对于值17,一个测试用例没有通过,而对于其他值,所有值都需要代码。
您可以看到提交的内容。
我只想知道这个解决方案的证明。
谢谢大家! 此解决方案依赖于输入值限制
B<10**18
=>B<2**60
,因此B
的因式分解中的任何素数因子的幂都低于60。然后,如果A
具有B
的所有素数因子,A**60
必须可被B
整除,如果A**60
可被B
整除,则它具有其所有素数因子,因此具有A
此解决方案依赖于输入值限制B<10**18
=>B<2**60
,因此B
的因式分解中的任何素数因子的幂都低于60。然后,如果A
具有B
的所有素数因子,A**60
必须可被B
整除,如果A**60
可被B
整除,则它具有其所有素数因子,因此具有A
此解决方案依赖于输入值限制B<10**18
=>B<2**60
,因此B
的因式分解中的任何素数因子的幂都低于60。然后,如果A
具有B
的所有素数因子,A**60
必须可被B
整除,如果A**60
可被B
整除,则它具有其所有素数因子,因此具有A
此解决方案依赖于输入值限制B<10**18
=>B<2**60
,因此B
的因式分解中的任何素数因子的幂都低于60。然后,如果A
具有B
的所有素数因子,A**60
必须可被B
整除,如果A**60
可被B
整除,则它具有所有的素数因子,因此具有A
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"