QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#32234 | #1457. FFT Algorithm | Wu_Ren | AC ✓ | 1164ms | 17512kb | C++11 | 1.8kb | 2022-05-18 09:47:21 | 2022-05-18 09:47:22 |
Judging History
answer
#include <bits/stdc++.h>
typedef long long ll;
typedef __int128 lll;
using namespace std;
mt19937_64 rng(time(0));
const int N=11048550;
int K,pr[729510],p=0;
bool isnt[N+10];
ll n,m,np,ny;
int na=0;
void init(){
for(int i=2;i<=N;i++){
if(!isnt[i]) pr[++p]=i;
for(int j=1;j<=p&&pr[j]*i<=N;j++){
isnt[pr[j]*i]=1;
if(i%pr[j]==0) break;
}
}
}
ll ksm(ll a,ll k){
ll res=1;
for(;k;k>>=1,a=a*a) if(k&1) res=res*a;
return res;
}
ll ksm(ll a,ll k,ll p){
ll res=1;
for(;k;k>>=1,a=lll(a)*a%p) if(k&1) res=lll(res)*a%p;
return res;
}
void t_r_y(ll p,ll phi){
if(na) return;
for(;(double)clock()/CLOCKS_PER_SEC<1.0&&!na;){
ll y=ksm(rng()%p,phi>>K,p),nw=1;
bool fl=1;
for(int j=1;j<(1<<K);j++){
nw=lll(nw)*y%p;
if(nw<=1){
fl=0;
break;
}
}
nw=lll(nw)*y%p;
if(nw!=1) fl=0;
if(fl){
np=p,na=1,ny=y;
break;
}
}
}
void chk(ll p,int a){
if(na) return;
if(p==2){
if(a-1-(a>=3)>=K) t_r_y(ksm(p,a),ksm(p,a-1-(a>=3)));
return;
}
if((p-1)&((1<<K)-1)) return;
t_r_y(ksm(p,a),(p-1)*ksm(p,a-1));
}
ll exgcd(ll a,ll b,ll &x,ll &y){
if(!b) return x=1,y=0,a;
ll t=exgcd(b,a%b,y,x);
y-=a/b*x;
return t;
}
ll mul(ll a,ll b,ll m){
ll res=0;
for(;b;b>>=1,a=2*a%m) if(b&1) res=(res+a)%m;
return res;
}
void exCRT(ll &M,ll &R,ll m,ll r){
ll x,y,g=exgcd(M,m,x,y),c=(r-R%m+m)%m;
if(c%g) exit(1);
x=mul(x,c/g,m/g);
R+=x*M;
M*=(m/g);
R=(R%M+M)%M;
}
int main(){
init();
scanf("%lld%d",&n,&K),m=n;
for(int i=1;i<=p;i++) if(m%pr[i]==0){
int c=0;
while(m%pr[i]==0) c++,m/=pr[i];
chk(pr[i],c);
}
for(int j=1;j<=N;j++){
ll nw=(((ll)j)<<K)+1;
int c=0;
while(m%nw==0) c++,m/=nw;
if(c) chk(nw,c);
}
chk(m,1);
if(!na) puts("-1");
else{
exCRT(np,ny,n/np,1%(n/np));
printf("%lld\n",ny);
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 349ms
memory: 17408kb
input:
998244353 23
output:
133453162
result:
ok OK valid solution
Test #2:
score: 0
Accepted
time: 168ms
memory: 17464kb
input:
1048576 15
output:
192545
result:
ok OK valid solution
Test #3:
score: 0
Accepted
time: 310ms
memory: 17400kb
input:
3 23
output:
-1
result:
ok OK no solution
Test #4:
score: 0
Accepted
time: 152ms
memory: 17348kb
input:
997261313 15
output:
91794688
result:
ok OK valid solution
Test #5:
score: 0
Accepted
time: 155ms
memory: 17368kb
input:
971604167 15
output:
250445879
result:
ok OK valid solution
Test #6:
score: 0
Accepted
time: 362ms
memory: 17304kb
input:
561972416 15
output:
-1
result:
ok OK no solution
Test #7:
score: 0
Accepted
time: 157ms
memory: 17364kb
input:
998572034 15
output:
341042357
result:
ok OK valid solution
Test #8:
score: 0
Accepted
time: 360ms
memory: 17400kb
input:
127941919 15
output:
-1
result:
ok OK no solution
Test #9:
score: 0
Accepted
time: 298ms
memory: 17388kb
input:
945553409 15
output:
-1
result:
ok OK no solution
Test #10:
score: 0
Accepted
time: 253ms
memory: 17364kb
input:
998244353 23
output:
195169157
result:
ok OK valid solution
Test #11:
score: 0
Accepted
time: 353ms
memory: 17316kb
input:
596468390 23
output:
-1
result:
ok OK no solution
Test #12:
score: 0
Accepted
time: 154ms
memory: 17448kb
input:
813335261 23
output:
-1
result:
ok OK no solution
Test #13:
score: 0
Accepted
time: 160ms
memory: 17244kb
input:
293185311 23
output:
-1
result:
ok OK no solution
Test #14:
score: 0
Accepted
time: 289ms
memory: 17452kb
input:
431142105 23
output:
-1
result:
ok OK no solution
Test #15:
score: 0
Accepted
time: 351ms
memory: 17176kb
input:
545259521 23
output:
-1
result:
ok OK no solution
Test #16:
score: 0
Accepted
time: 154ms
memory: 17408kb
input:
999999998361601 15
output:
630822538949956
result:
ok OK valid solution
Test #17:
score: 0
Accepted
time: 158ms
memory: 17408kb
input:
999956339174017 15
output:
773653506844739
result:
ok OK valid solution
Test #18:
score: 0
Accepted
time: 164ms
memory: 17368kb
input:
999999934158041 15
output:
460394886887112
result:
ok OK valid solution
Test #19:
score: 0
Accepted
time: 160ms
memory: 17320kb
input:
999870494845507 15
output:
323423996500080
result:
ok OK valid solution
Test #20:
score: 0
Accepted
time: 157ms
memory: 17452kb
input:
987500017287169 15
output:
881207504808157
result:
ok OK valid solution
Test #21:
score: 0
Accepted
time: 981ms
memory: 17284kb
input:
999869489774593 15
output:
-1
result:
ok OK no solution
Test #22:
score: 0
Accepted
time: 534ms
memory: 17320kb
input:
999999643058177 23
output:
89556549549344
result:
ok OK valid solution
Test #23:
score: 0
Accepted
time: 397ms
memory: 17316kb
input:
999029131455133 23
output:
912953334003060
result:
ok OK valid solution
Test #24:
score: 0
Accepted
time: 153ms
memory: 17380kb
input:
980573759207039 23
output:
-1
result:
ok OK no solution
Test #25:
score: 0
Accepted
time: 402ms
memory: 17444kb
input:
997380719651467 23
output:
255883246733265
result:
ok OK valid solution
Test #26:
score: 0
Accepted
time: 318ms
memory: 17400kb
input:
673383102728611 23
output:
-1
result:
ok OK no solution
Test #27:
score: 0
Accepted
time: 1164ms
memory: 17252kb
input:
997055929516033 23
output:
-1
result:
ok OK no solution
Test #28:
score: 0
Accepted
time: 158ms
memory: 17512kb
input:
3999999999999705089 15
output:
381067345616449405
result:
ok OK valid solution
Test #29:
score: 0
Accepted
time: 153ms
memory: 17316kb
input:
3999993153100322407 15
output:
1214657090453258166
result:
ok OK valid solution
Test #30:
score: 0
Accepted
time: 160ms
memory: 17464kb
input:
3999999979069450717 15
output:
1743498927959986936
result:
ok OK valid solution
Test #31:
score: 0
Accepted
time: 156ms
memory: 17512kb
input:
3999991341703927187 15
output:
1080709088574241881
result:
ok OK valid solution
Test #32:
score: 0
Accepted
time: 160ms
memory: 17448kb
input:
1641566238888296449 15
output:
1070525302444995667
result:
ok OK valid solution
Test #33:
score: 0
Accepted
time: 976ms
memory: 17296kb
input:
3999987196009414657 15
output:
-1
result:
ok OK no solution
Test #34:
score: 0
Accepted
time: 537ms
memory: 17460kb
input:
3999999999713738753 23
output:
31389787132760600
result:
ok OK valid solution
Test #35:
score: 0
Accepted
time: 611ms
memory: 17464kb
input:
3999977144498948549 23
output:
2198802854867146993
result:
ok OK valid solution
Test #36:
score: 0
Accepted
time: 253ms
memory: 17320kb
input:
3999999983264930527 23
output:
2212096408293331031
result:
ok OK valid solution
Test #37:
score: 0
Accepted
time: 660ms
memory: 17372kb
input:
3999867163212679501 23
output:
1272602077285424702
result:
ok OK valid solution
Test #38:
score: 0
Accepted
time: 566ms
memory: 17440kb
input:
2928465661120217089 23
output:
596640058846016531
result:
ok OK valid solution
Test #39:
score: 0
Accepted
time: 1162ms
memory: 17304kb
input:
3999790589313810433 23
output:
-1
result:
ok OK no solution
Test #40:
score: 0
Accepted
time: 335ms
memory: 17380kb
input:
65536 15
output:
-1
result:
ok OK no solution
Test #41:
score: 0
Accepted
time: 155ms
memory: 17424kb
input:
131072 15
output:
70115
result:
ok OK valid solution
Test #42:
score: 0
Accepted
time: 160ms
memory: 17316kb
input:
2305843009213693952 15
output:
1690609078868377601
result:
ok OK valid solution
Test #43:
score: 0
Accepted
time: 284ms
memory: 17396kb
input:
16777216 23
output:
-1
result:
ok OK no solution
Test #44:
score: 0
Accepted
time: 258ms
memory: 17436kb
input:
33554432 23
output:
16152779
result:
ok OK valid solution
Test #45:
score: 0
Accepted
time: 406ms
memory: 17452kb
input:
2305843009213693952 23
output:
1480880259527081985
result:
ok OK valid solution