結果
| 問題 | No.1006 Share an Integer |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-13 15:54:41 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 802 ms / 2,000 ms |
| コード長 | 1,270 bytes |
| 記録 | |
| コンパイル時間 | 325 ms |
| コンパイル使用メモリ | 82,248 KB |
| 実行使用メモリ | 107,852 KB |
| 最終ジャッジ日時 | 2025-09-13 15:54:51 |
| 合計ジャッジ時間 | 9,207 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
## https://yukicoder.me/problems/no/1006
def main():
X = int(input())
# osa-k法による素因数分解をベースに約数の数を計算
min_primes = [i for i in range(X + 1)]
for p in range(2, X + 1):
if min_primes[p] != p:
continue
x = 2 * p
while x <= X:
if min_primes[x] == x:
min_primes[x] = p
x += p
divisor_count = [0] * (X + 1)
for x in range(1, X + 1):
p_map = {}
x0 = x
while x0 != 1:
p = min_primes[x0]
if p not in p_map:
p_map[p] = 0
p_map[p] += 1
x0 //= p
ans = 1
for v in p_map.values():
ans *= (v + 1)
divisor_count[x] = ans
answer = float("inf")
answer_ab = []
for a in range(1, X):
b = X - a
da = divisor_count[a]
db = divisor_count[b]
ans = abs(a - da - b + db)
if answer > ans:
answer = ans
answer_ab = [(a, b)]
elif answer == ans:
answer_ab.append((a, b))
answer_ab.sort(key=lambda x : x[0])
for ans in answer_ab:
print(ans[0],ans[1])
if __name__ == "__main__":
main()