본문 바로가기

algorithm

[BOJ] 20412 추첨상 사수 대작전

 

/******************************************************************************

                        BOJ 페르마 소정리 20412
                        X1 = (a × Seed + c) % m 
                        X2 = (a × X1 + c) % m
                        a ? c ?
*******************************************************************************/

#include <iostream>

using namespace std;
using ll = long long;
ll m,s,x1,x2;

ll mul(ll x, ll m, ll d){
    if(m == 0) return 1;
    if(m == 1) return x;
    ll p = mul(x , m/2,d);
    if(m % 2 == 0) return (p*p)%d;
    else return ((p*p)%d * x)%d;
}

int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>m>>s>>x1>>x2;
    ll a = ((x1 - x2)* (mul(s-x1,m-2,m)% m))% m;
    if(a < 0) a += m;
    ll c = (x1 % m - (a * s) % m) % m;
    if(c < 0) c+= m;
    cout<<a<<" "<<c;
    return 0;
}

'algorithm' 카테고리의 다른 글

dp연습1  (0) 2022.08.24
[BOJ] 3178 코코스  (0) 2022.08.23
[BOJ] 9938 방청소  (0) 2022.08.05
유클리드 호제법, 모듈로 역원  (0) 2022.08.03
13335 트럭  (0) 2022.07.24