1

この問題の入力は、正の整数と単一の正の整数 k の配列 A です。プログラムの出力は、k が以下で定義されたセット S にある場合は True、そうでない場合は False です。

セット S を次のように定義します。

  1. x が A にある場合、x は S にある
  2. x と y が S にある場合、GCD(x,y) は S にある
  3. x と y が S にある場合、LCD(x,y) は S にある

追加の制約: 配列 A のサイズは ≤ 50000、k ≤ 10 12、および A の各 x について x ≤ 10 12です。プログラムは 1 秒以内に答えを返さなければなりません。

いい考えがありません。私が考えることができる唯一のことは、配列内の整数の任意のペアの GCD と LCM を見つけることです。その後、集合 S を拡大できます。 .

皆さんが私を助けてくれることを願っています。私はこれに長い間立ち往生しています。

アップデート:

たとえば、配列は 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) = S で 60

...

ついに:

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

4

1 に答える 1

2

k を異なる素数の累乗に因数分解します。そのような素数の力率ごとに、それが除数であるすべての配列要素の GCD を計算します。一部の GCD が k の約数でない場合 (およびその場合にのみ)、S は k を含みません。

正しさの証明には、正の整数が演算子 GCD と LCM を持つ分配格子であるという事実が含まれます。

于 2015-12-26T15:08:31.100 に答える