Official
B - Almost GCD Editorial by QCFium
まず、\(A_i\) の上限である \(1000\) より大きい数は GCD 度が \(0\) です。ところが \(2 \le A_i\) より \(A_1\) の GCD 度は少なくとも \(1\) なので \(1000\) より大きい数は考慮に入れる必要がないことが分かります。
すると、 \(2\) 以上 \(1000\) 以下のそれぞれの整数 \(k\) について GCD 度を計算してその中で GCD 度が最大だったときの \(k\) を出力すればよいことになります。
「 \(2\) 以上 \(1000\) 以下のそれぞれの整数 \(k\) について 」の処理や、ある整数の GCD 度の計算は繰り返し文を使うと実現できます。GCD 度が最大になるような \(k\) を求めるのは、今までの GCD 度の最大値と、そのときの \(k\) を持つ \(2\) つの変数を用意して、今の GCD 度が今までの GCD 度より大きかったらこの \(2\) つの変数を更新することでできます。
解答例 (C) ※C99 を仮定しています
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int a[n];
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
int max = 0;
int res = -1;
for (int i = 2; i <= 1000; i++) {
int cnt = 0;
for (int j = 0; j < n; j++) if (a[j] % i == 0) cnt++;
if (max < cnt) max = cnt, res = i;
}
printf("%d\n", res);
return 0;
}
解答例 (Python)
N = int(input())
A = list(map(int, input().split()))
ans = -1
mx = 0
for x in range(2, 1001):
s = sum(a % x == 0 for a in A)
if mx < s:
mx = s
ans = x
print(ans)
posted:
last update: