Mai intai trebuie sa te autentifici.
Cod sursa(job #1765316)
| Utilizator | Data | 26 septembrie 2016 17:00:31 | |
|---|---|---|---|
| Problema | Invers modular | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.72 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("inversmodular.in");
ofstream t ("inversmodular.out");
int64_t pow(int64_t x,int64_t y,int64_t n){
int64_t m=1;
while(y)
{
if(y&1)
{
m=(m*x);
}
x=(x*x);
y>>=1;
}
return m%n;
}
int64_t desc(int64_t n){int64_t p=1;
for (int64_t i=2;i<=n/2;++i)
if (n%i==0){
p*=((i-1)*n)/ i;
while(n%i==0)
n/=i;
}
if (p==1)
return -1;
return p;
}
int64_t psi(int64_t n){
int64_t s=n,x=desc(n);
if (x>=0)
s*=x;
else
s=n-1;
return s;
}
int main()
{int64_t a,n;
f>>a>>n;
t<<pow(a,psi(n)-1,n);
return 0;
}
