結果
問題 |
No.1276 3枚のカード
|
ユーザー |
![]() |
提出日時 | 2020-10-30 22:42:51 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,655 bytes |
コンパイル時間 | 1,690 ms |
コンパイル使用メモリ | 171,940 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-22 02:16:08 |
合計ジャッジ時間 | 9,160 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 2 RE * 59 |
ソースコード
#include <bits/stdc++.h> using namespace std; const long long MOD = 1000000007; vector<pair<long long, pair<long long, long long>>> quotient_ranges(long long N){ vector<pair<long long, pair<long long, long long>>> ans; for (long long i = 1; i * i <= N; i++){ ans.push_back(make_pair(N / i, make_pair(i, i))); } for (long long i = N / ((long long) sqrt(N) + 1); i >= 1; i--){ ans.push_back(make_pair(i, make_pair(N / (i + 1) + 1, N / i))); } return ans; } long long factor_count_sum(long long N){ //d(1)+d(2)+...+d(N) vector<pair<long long, pair<long long, long long>>> Q = quotient_ranges(N); int cnt = Q.size(); long long ans = 0; for (int i = 0; i < cnt; i++){ ans += Q[i].first * (Q[i].second.second - Q[i].second.first + 1) % MOD; ans %= MOD; } return ans; } int main(){ long long N; cin >> N; assert(N < 300); long long F = factor_count_sum(N); long long ans1 = (F - N + MOD) * (N - 2) % MOD; vector<pair<long long, pair<long long, long long>>> Q = quotient_ranges(N); int cnt = Q.size(); long long ans2 = 0; for (int i = 0; i < cnt; i++){ long long a = Q[i].first; long long b = Q[i].second.second - Q[i].second.first + 1; long long c = (a - 1) % MOD * (a - 2) % MOD * 500000004 % MOD; ans2 += b * c % MOD; ans2 %= MOD; } ans2 *= 2; ans2 %= MOD; long long ans3 = 0; for (int i = 0; i < cnt; i++){ long long a = Q[i].first; long long b = Q[i].second.second - Q[i].second.first + 1; long long G = factor_count_sum(a) - a * 2 % MOD + 1 + MOD; G %= MOD; ans3 += b * G % MOD; ans3 %= MOD; } cout << (ans1 - ans2 - ans3 + MOD * 2) % MOD << endl; }