Official
A - Sum of Reciprocals of Squares Editorial
by
A - Sum of Reciprocals of Squares Editorial
by
sounansya
長さ \(n\) の正整数列 \(A=(A_1,A_2,\ldots,A_n)\) が\(\displaystyle\sum_{i=1}^n\frac1{A_i^2}=1\) を満たす時、\(A\) を良い整数列と呼びます。
まず、小さいケースを全て試すことで \(N=2,3,5\) の場合の答えは No であることが分かります。
長さ \(N\) の整数列 \(A=(A_1,A_2,\ldots,A_N)\) が 良い整数列であるとき、\(A'=(A_2,A_3,\ldots,A_N,2A_1,2A_1,2A_1,2A_1)\) も良い整数列となります。
このことを用いると、\(N=1,6,8\) の場合の小さいケースを作ることができればそれを元に再帰的に \(A\) を構成できることが分かります。
そして、これらのケースでは以下が条件を満たします:
- \(N=1\):\(A=(1)\)
- \(N=6\):\(A=(2,2,2,3,3,6)\)
- \(N=8\):\(A=(2,2,3,3,3,3,6,6)\)
これらをベースケースとして順番に構成することができます。
以上を適切に実装することでこの問題に正答することができます。
import sys
from collections import deque
input = sys.stdin.readline
for _ in range(int(input())):
n = int(input())
if n in [2, 3, 5]:
print("No")
continue
if n % 3 == 0:
a = deque([2, 2, 2, 3, 3, 6])
elif n % 3 == 1:
a = deque([1])
else:
a = deque([2, 2, 3, 3, 3, 3, 6, 6])
while len(a) < n:
x = a.popleft()
for i in range(4):
a.append(2 * x)
ans = list(a)
print("Yes")
print(*ans)
posted:
last update:
