結果
| 問題 | No.1006 Share an Integer |
| コンテスト | |
| ユーザー |
siman
|
| 提出日時 | 2022-05-18 03:01:26 |
| 言語 | Ruby (3.4.1) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 765 bytes |
| 記録 | |
| コンパイル時間 | 195 ms |
| コンパイル使用メモリ | 7,168 KB |
| 実行使用メモリ | 37,632 KB |
| 最終ジャッジ日時 | 2024-09-16 02:15:04 |
| 合計ジャッジ時間 | 21,755 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 15 TLE * 4 |
コンパイルメッセージ
Syntax OK
ソースコード
GC.disable
X = gets.to_i
SPF = Array.new(X + 1)
SPF[0] = 0
SPF[1] = 1
2.upto(X) do |x|
next if SPF[x]
x.step(X, x) do |n|
next if SPF[n]
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