Cod sursa(job #2352656)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 23 februarie 2019 15:49:37
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>
#define LL long long

using namespace std;

LL N,M;

LL getphi(LL nr){
	LL cur = nr;

	for(LL i = 2; i * i <= nr; ++i){
		if (nr % i == 0){
			while(nr % i == 0)
                nr /= i;
			cur = (cur / i) * (i - 1);
		}
	}

    if (nr != 1)
        cur = cur / nr * (nr - 1);

	return cur;
}

int main(){

	freopen("inversmodular.in","r",stdin);
	freopen("inversmodular.out","w",stdout);

	scanf("%lld %lld\n",&N,&M);

    LL put = getphi(M) - 1;
	LL nr = N;
	LL crt = 1;

    for(LL p = 1; p <= put; p <<= 1){
	 	if (p & put)
            crt = (crt * nr) % M;
	  	nr = (nr * nr) % M;
	}

	printf("%lld\n",crt);

	return 0;
}