こちらはあまり考えず解いてしまった。
https://yukicoder.me/problems/no/1819
問題
素数P,Qと正整数X,Yが与えられる。
正整数Nに対し、Nの10進数表記を反転させleading zeroを取り除いた表記を取る値をrev(N)とする。
N % P = X
rev(N) % Q = Y
を満たすNを答えよ。
なお、P=90007で固定とする。
解法
Pが小さいことを利用する。
M % Q = YとなるM、すなわちM=kQ+Yをk=0~10^6程度まで総当たりしよう。
Mのうち1の位が0でなく、かつrev(M) % P = Xとなるものを見つければよい。
ll P,Q,X,Y; ll rev(ll v) { ll w=0; while(v) { w=w*10+v%10; v/=10; } return w; } void solve() { int i,j,k,l,r,x,y; string s; cin>>P>>Q>>X>>Y; FOR(i,10000000) { ll V=(ll)i*Q+Y; ll W=rev(V); if(V%10==0) continue; if(W%P==X) { cout<<W<<endl; return; } } }
まとめ
想定解じゃなかった。