結果
| 問題 |
No.1006 Share an Integer
|
| コンテスト | |
| ユーザー |
siman
|
| 提出日時 | 2020-09-11 06:18:42 |
| 言語 | Ruby (3.4.1) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 769 bytes |
| コンパイル時間 | 339 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 28,416 KB |
| 最終ジャッジ日時 | 2024-12-24 15:48:43 |
| 合計ジャッジ時間 | 20,500 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 TLE * 2 |
コンパイルメッセージ
Syntax OK
ソースコード
X = gets.to_i
SPF = Array.new(X + 1, -1)
SPF[0] = 0
SPF[1] = 1
2.upto(X) do |x|
next if SPF[x] != -1
x.step(X, x) do |n|
next if SPF[n] != -1
SPF[n] = x
end
end
def divisor_count(x)
res = 1
cur = -1
cnt = 0
while x != 1
f = SPF[x]
if cur != f
res *= (cnt + 1)
cur = f
cnt = 1
else
cnt += 1
end
x /= f
end
res * (cnt + 1)
end
min_diff = Float::INFINITY
ans = []
1.upto(X / 2) do |a|
b = X - a
v1 = a - divisor_count(a)
v2 = b - divisor_count(b)
diff = (v1 - v2).abs
if min_diff > diff
min_diff = diff
ans = [[a, b]]
ans << [b, a] if a != b
elsif min_diff == diff
ans << [a, b]
ans << [b, a] if a != b
end
end
puts ans.sort.map { |nums| nums.join(' ') }
siman