Mai intai trebuie sa te autentifici.
Cod sursa(job #1510725)
Utilizator | Data | 25 octombrie 2015 15:54:41 | |
---|---|---|---|
Problema | Invers modular | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.71 kb |
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int fi(int n)
{
int f=n, i;
for (i=2; i*i<=n; i++){
if (n%i==0){
while (n%i==0)
n/=i;
f=(f/i)*(i-1);
}
}
if (n>1)
f=f/n*(n-1);
return f;
}
int put(long long a, long long b, int c){
int p=1;
while(b!=0){
if(b%2==1){
p=(p*a)%c;
--b;
}
a=(a*a)%c;
b/=2;
}
return p;
}
int main()
{
long long int a, n, x;
fin>>a>>n;
x=fi(n)-1;
fout<<put(a,x,n);
return 0;
}