算法 - GCD和LCM问题

时间:2015-12-26 12:02:14

标签: algorithm math greatest-common-divisor lcm

此问题的输入是正整数和单正整数k的数组A.如果k在下面定义的集合S中,则程序的输出为True,否则为False。

按如下方式定义集合S:

     
  1. 如果x在A中,则x在S
  2. 中  
  3. 如果x和y在S中,则GCD(x,y)在S
  4. 中  
  5. 如果x和y在S中,则LCD(x,y)在S
  6. 中  

    附加约束:对于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)= 2

    S

    中的GCD(10,15)= 5

    S

    中的GCD(12,15)= 3

    LCM(10,12)= 60

    ...

    最后:

    S = {1,2,3,5,10,12,15,30,60}

1 个答案:

答案 0 :(得分:2)

将k因子分解为不同素数的幂。对于每个这样的主要功率因数,计算它是除数的所有数组元素的GCD。如果(且仅当)某些GCD不是k的除数,则S不包含k。

正确性证明涉及正整数是运算符GCD和LCM的分布格的事实。