結果
問題 | 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;}}