結果
問題 | No.2181 LRM Question 2 |
ユーザー |
![]() |
提出日時 | 2023-01-06 22:39:02 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,671 bytes |
コンパイル時間 | 3,884 ms |
コンパイル使用メモリ | 254,780 KB |
最終ジャッジ日時 | 2025-02-10 00:12:31 |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 WA * 3 |
ソースコード
#include <stdio.h>#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;using mint = modint;using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf32 1000000001#define Inf64 2000000000000000005int main(){long long L,R,M;cin>>L>>R>>M;if(M==1){cout<<0<<endl;return 0;}mint::set_mod(M);vector<int> ps;{int m = M;for(int i=2;i<=M;i++){if(m%i==0){ps.push_back(i);while(m%i==0){m /= i;}}}}vector<mint> v(M,1);vector<vector<int>> n(M,vector<int>(ps.size(),0));for(int i=1;i<M;i++){int c = i;rep(j,ps.size()){while(c%ps[j]==0){n[i][j]++;c/=ps[j];}}v[i] = c;v[i] *= v[i-1];rep(j,ps.size()){n[i][j] += n[i-1][j];}}/*rep(i,M){rep(j,ps.size()){cout<<n[i][j]<<',';}cout<<endl;}*/mint ans = 0;for(long long i=L;i<=R;i++){long long x = i*2;long long y = i;mint cv = 1;cv *= v.back().pow(x/M);cv *= v[x%M];rep(j,2){cv /= v.back().pow(y/M);cv /= v[y%M];}rep(j,ps.size()){long long t = x;long long s = 0;while(t!=0){s += t/ps[j];t /= ps[j];}rep(k,2){t = y;while(t!=0){s -= t/ps[j];t /= ps[j];}}cv *= mint(ps[j]).pow(s);}ans += cv - 2;}cout<<ans.val()<<endl;/*long long n;cin>>n;long long ans = 0;for(long long i=1;i<=n-1;i++){long long x = 1;for(long long j=1;j<=i;j++){x *= (n-j+1) * (n-j+1);}for(long long k=i+1;k<=n;k++){x *= k * k;}ans += x;}rep(i,n){ans /= i+1;ans /= i+1;}cout<<ans<<endl;*/return 0;}