解答
数を多項式としてみなすことを考えましょう。
具体的には、ある数Xを二進数表記をしたとき,kビット目が立っている時にxkを要素にもつような
全ての係数が{0,1}の多項式を対応させます。
たとえば、
13=23+22+1ですので13→x3+x2+1となります。
加えていくつかの定義をします。
はじめに、2つの整数係数多項式f(x),g(x)が全ての係数において偶奇が等しいとき
これらは「互いに法を2として合同である」とし、「f(x)=g(x)(mod 2)」とかくことにします。
たとえば、
f(x)=x4+x2+1,g(x)=19x4−x2+101
は互いに法を2として合同で「f(x)=g(x)(mod 2)」です。
2つめに、多項式f(x),g(x)に対して、以下を満たす整数係数多項式q(x)が存在する場合、「f(x)はg(x)で割り切れる/g(x)はf(x)の因数である」ということにします。
・f(x)=g(x)q(x)(mod 2)
たとえば、
f(x)=x2+1,g(x)=x+1
としたとき
f(x)=x2+2x+1=g(x)g(x)(mod 2)ですので「f(x)はg(x)で割り切れる/g(x)はf(x)の因数」です。
ここで、Aiを上記の規則に従って多項式に対応させた結果得られる多項式をfi(x)とします。
3つめに、整数係数の多項式の集合をGとし、Gに属する多項式のうち、以下を満たす(c1(x),...cn(x))が存在する多項式h(x)の集合をHとします。
・h(x)=i=1∑nci(x)fi(x)(mod 2),ci∈G かつ全ての係数が0,1のいずれか
明らかに、題意の操作を繰り返して得られる数を多項式に変換した時、それらはHに含まれるものであることがわかります。
そして、全てのfi(x)を割り切る多項式のうち、全ての係数が{0,1}になるものが存在します。
これをPとし、これが1以外に存在しないことが必要十分条件でもあります。(P(x)=1が条件を満たすことは明らか。)
このようなPを求めるには、多項式に対して通常の整数と同様にEuclidの互助法的な考え方をもちいて再帰的に計算を行えば良いです。
適切に実装を行えば、時間計算量O(N(logA)2)の回答を得ることができます。