Pagini recente » Cod sursa (job #2123658) | Cod sursa (job #1435095) | Cod sursa (job #565770) | Cod sursa (job #1783394) | Cod sursa (job #1476484)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define infile "valuare.in"
#define outfile "valuare.out"
using namespace std;
ifstream fin(infile);
ofstream fout(outfile);
void euclid(long long a, long long b, long long &x, long long &y) {
if (!b) {
x = 1, y = 0;
return;
}
long long xa, ya;
euclid(b, a % b, xa, ya);
x = ya;
y = xa - (a / b)*ya;
}
long long invers(long long a, long long MOD) {
long long x, y;
euclid(MOD, a, y, x);
while (x < 0)
x += MOD;
x %= MOD;
return x;
}
int main() {
long long b;
int p;
fin >> b >> p;
long long solution = 1, temp = b % p;
long long exponent = b;
while (exponent) {
if (exponent & 1) {
solution = (solution * temp) % p;
}
temp = (temp * temp) % p;
exponent >>= 1;
}
int bb = b % p;
solution = (solution + p - (bb * bb) % p + bb + p - 1) % p;
bb = (bb + p - 1) % p;
solution *= invers((bb * bb) % p, p);
solution %= p;
fout << solution;
return 0;
}
//Trust me, I'm the Doctor!
//Miriam e tare!