結果
問題 | No.1918 Simple Math ? |
ユーザー |
![]() |
提出日時 | 2022-04-29 22:32:22 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 567 ms / 2,000 ms |
コード長 | 959 bytes |
コンパイル時間 | 1,522 ms |
コンパイル使用メモリ | 167,844 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-29 04:07:18 |
合計ジャッジ時間 | 7,944 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 33 |
ソースコード
#include <bits/stdc++.h> using namespace std; const long long MOD = 1000000007; const long long HALF = 500000004; const long long ONE_SIXTH = 166666668; long long sum1(long long N){ N %= MOD; return N * (N + 1) % MOD * HALF % MOD; } long long sum2(long long N){ N %= MOD; return N * (N + 1) % MOD * (N * 2 + 1) % MOD * ONE_SIXTH % MOD; } int main(){ int T; cin >> T; for (int i = 0; i < T; i++){ long long a, N; cin >> a >> N; long long mx = sqrt(a * N); long long ans = N % MOD * mx % MOD; for (int j = 0; j < min(a, mx + 1); j++){ long long q = (mx - j) / a; ans += MOD - sum2(q) * a % MOD; ans += MOD - sum1(q) * j * 2 % MOD; if (j != 0){ q++; } q %= MOD; long long s; if (j == 0 && a > 1){ s = MOD - 1; } else { s = ((long long) j * j - 1) / a % MOD; } ans += MOD - s * q % MOD; } ans %= MOD; cout << ans << endl; } }