此问题的输入是正整数和单正整数k的数组A.如果k在下面定义的集合S中,则程序的输出为True,否则为False。
按如下方式定义集合S:
附加约束:对于A中的每个x,数组A的大小≤50000,k≤10 12 ,x≤10 12 。程序必须返回答案在1秒或更短的时间内。
我没有任何好主意。我唯一能想到的是找到阵列中任何一对整数的GCD和LCM,然后我可以放大集合S.但随着S的扩展,新的整数将是新的整数,以制作更多的GCD和LCM
我希望你们帮帮我。我一直坚持这个。
更新
例如,给出的数组是A = {10,12,15};
正如我们所提到的,S = {...,10,12,15,...}
我们知道10,12,15在S.所以他们的GCD和LCM也在S中。这意味着:
S
中的GCD(10,12)= 2S
中的GCD(10,15)= 5S
中的GCD(12,15)= 3LCM(10,12)= 60
...
最后:
S = {1,2,3,5,10,12,15,30,60}
答案 0 :(得分:2)
将k因子分解为不同素数的幂。对于每个这样的主要功率因数,计算它是除数的所有数组元素的GCD。如果(且仅当)某些GCD不是k的除数,则S不包含k。
正确性证明涉及正整数是运算符GCD和LCM的分布格的事实。