結果
| 問題 | No.886 Direct |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-04-20 21:27:28 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 362 ms / 4,000 ms |
| コード長 | 998 bytes |
| 記録 | |
| コンパイル時間 | 933 ms |
| コンパイル使用メモリ | 180,468 KB |
| 実行使用メモリ | 19,456 KB |
| 最終ジャッジ日時 | 2026-04-20 21:27:34 |
| 合計ジャッジ時間 | 4,888 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
#include <bits/stdc++.h>
#define ll long long
#define mod 1000000007LL
using namespace std;
int n, m, pcnt; ll ans, suma, sumb; int mu[3000009], prime[3000009]; bool notp[3000009];
int main() {
scanf("%d %d", &n, &m);
mu[1] = 1; for(int i = 2; i <= min(n, m); i++) {
if(!notp[i]) mu[i] = -1, prime[++pcnt] = i;
mu[i] = (mu[i] + mod) % mod;
for(int j = 1; j <= pcnt && i * prime[j] <= min(n, m); j++) {
notp[i * prime[j]] = true;
mu[i * prime[j]] = -mu[i];
if(i % prime[j] == 0) {
mu[i * prime[j]] = 0;
break;
}
}
}
ans = ((ll)(n - 1) * m + (ll)(m - 1) * n) % mod;
for(int i = 1; i <= min(n, m) - 1; i++) {
suma = 0; for(int j = i; j < n; j += i) suma = (suma + n - j) % mod;
sumb = 0; for(int j = i; j < m; j += i) sumb = (sumb + m - j) % mod;
ans = ((((suma * sumb) % mod * mu[i]) % mod * 2) % mod + ans) % mod;
}
printf("%lld\n", ans);
return 0;
}
vjudge1