QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#188483 | #5. 在线 O(1) 逆元 | EnofTaiPeople | 100 ✓ | 5347ms | 394464kb | C++14 | 533b | 2023-09-25 21:23:28 | 2024-11-05 21:52:26 |
Judging History
answer
#include<bits/stdc++.h>
#include "inv.h"
using namespace std;
using ll=long long;
const int N=1e8+8,M=998244353;
int nv[N];
void init(int p){
int x;
nv[0]=nv[1]=1;
for(x=2;x<N;++x)
nv[x]=ll(M-M/x)*nv[M%x]%M;
}
int sol(int d){
if(d<N)return nv[d];
if(d<M-d){
return ll(M-M/d)*sol(M%d)%M;
}else{
d=M-d;
return ll(M/d)*sol(M%d)%M;
}
}
int inv(int x){
ll res=1;
while(x>=N){
if(x<M-x)(res*=-M/x)%=M,x=M%x;
else x=M-x,(res*=M/x)%=M,x=M%x;
}
((res*=nv[x])%=M)<0&&(res+=M);
return res;
}
詳細信息
Pretests
Final Tests
Test #1:
score: 10
Accepted
time: 683ms
memory: 394456kb
Test #2:
score: 20
Accepted
time: 1194ms
memory: 394400kb
Test #3:
score: 30
Accepted
time: 2981ms
memory: 394464kb
Test #4:
score: 20
Accepted
time: 4348ms
memory: 394396kb
Test #5:
score: 20
Accepted
time: 5347ms
memory: 394448kb