Pagini recente » Cod sursa (job #1470104) | Cod sursa (job #1630395) | Cod sursa (job #330551) | Cod sursa (job #2383144) | Cod sursa (job #1450807)
using namespace std;
# include <cstdio>
struct V
{
long long a, b, mod;
V operator+ (const V &other)
{
V res;
res.a = (this->a + other.a) % mod;
res.b = (this->b + other.b) % mod;
return res;
}
V operator- (const V &other)
{
V res;
res.a = (this->a - other.a) % mod;
res.b = (this->b - other.b) % mod;
return res;
}
V operator* (const long long other)
{
V res;
res.a = (this->a * other) % mod;
res.b = (this->b * other) % mod;
return res;
}
};
long long Invers_Modular(long long a, long long b)
{
long long sol, q, r;
V Va, Vb, Vr;
Va.mod = Vb.mod = Vr.mod = b;
Va.a = Vb.b = 1;
Va.b = Vb.a = 0;
while (b)
{
q = a / b;
r = a % b;
Vr = Va - Vb * q;
a = b, Va = Vb;
b = r, Vb = Vr;
}
sol = Va.a;
return sol % Va.mod;
}
int main()
{
long long A, N, invA;
FILE *inFile, *outFile;
const char *inFileName = "inversmodular.in";
const char *outFileName = "inversmodular.out";
inFile = fopen(inFileName, "r");
fscanf(inFile, "%lld%lld", &A, &N);
fclose(inFile);
invA = Invers_Modular(A % N, N);
while (invA < 0)
invA += N;
outFile = fopen(outFileName, "w");
fprintf(outFile, "%lld\n", invA);
fclose(outFile);
return 0;
}