結果
問題 |
No.2645 Sum of Divisors?
|
ユーザー |
|
提出日時 | 2025-03-15 00:14:14 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 562 ms / 2,000 ms |
コード長 | 910 bytes |
コンパイル時間 | 446 ms |
コンパイル使用メモリ | 82,232 KB |
実行使用メモリ | 389,328 KB |
最終ジャッジ日時 | 2025-03-15 00:14:30 |
合計ジャッジ時間 | 16,688 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
## https://yukicoder.me/problems/no/2645 import math MAX_ = 2 * 10 ** 7 def cum_func(cum_array, n): if n <= MAX_: return cum_array[n] else: return math.log(n) - math.log(MAX_) + cum_array[MAX_] def main(): N = int(input()) cum_array = [0] * (MAX_ + 1) a = 0 for i in range(1, MAX_ + 1): a += 1 / i cum_array[i] = a sqrt_n = int(math.sqrt(N)) answer = 0 # 約数がsqrt_n以下のもの for n in range(1, sqrt_n + 1): q = N // n answer += cum_func(cum_array, q) / n # 該当する数が約数として持つ数のわ for num in range(1, sqrt_n + 1): max_n = N // (num) min_n = max(N // (num + 1), sqrt_n) answer += (cum_func(cum_array, max_n) - cum_func(cum_array, min_n)) * cum_func(cum_array, num) print(answer) if __name__ == "__main__": main()