結果
問題 | No.1627 三角形の成立 |
ユーザー |
![]() |
提出日時 | 2021-07-24 02:07:44 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 26 ms / 1,000 ms |
コード長 | 787 bytes |
コンパイル時間 | 3,875 ms |
コンパイル使用メモリ | 253,284 KB |
最終ジャッジ日時 | 2025-01-23 09:20:09 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 22 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include <atcoder/all> using namespace atcoder; using mint = modint1000000007;//998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 mint get(long long x){ mint ret = x; ret *= x-1; ret *= x-2; ret /=6 ; return ret; } int main(){ long long n,m; cin>>n>>m; mint ans = get(n*m); ans -= get(n)*m; ans -= get(m)*n; vector<mint> cur(200005,0); for(int i=2;i<=200000;i++){ mint x = 0; for(int j=i;j<n;j+=i){ x += n - j; } mint y = 0; for(int j=i;j<m;j+=i){ y += m - j; } cur[i] += i-1; for(int j=i*2;j<cur.size();j+= i)cur[j] -= cur[i]; ans -= x*y*2*(cur[i]); } // rep(i,7)cout<<cur[i].val()<<endl; cout<<ans.val()<<endl; return 0; }