Pagini recente » Cod sursa (job #212506) | Cod sursa (job #517556) | Cod sursa (job #850344) | Cod sursa (job #262299) | Cod sursa (job #900108)
Cod sursa(job #900108)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <set>
#include <queue>
#include <deque>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
#define nmax
#define ll long long
ll A, N;
void citeste(){
f >> A >> N;
}
ll put(ll a, ll b){
// a ^ b;
ll rez = 1;
while(b){
if (b % 2 == 1){
rez = (rez * a) % N;
}
a = (a * a) % N;
b /= 2;
}
return rez;
}
void rezolva(){
// deci eu vreau sa aflu inversul lui A; adica A * ceva trebuie sa fie congruent cu 1 (modulo n) adica (A * ceva) % n = 1;
// eu stiu ca [A ^ (n-1)] % n = 1; doar daca n e nr prim; => [A * A^(n-2) ] % n = 1; => ceva = A ^ (n-2);
g << put(A, N-2) << "\n";
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}