Cod sursa(job #229061)
| Utilizator | Data | 9 decembrie 2008 06:55:43 | |
|---|---|---|---|
| Problema | Invers modular | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.76 kb |
#include<fstream>
using namespace std;
int main()
{
long long i, n, a,p,nr;
ifstream f("inversmodular.in");
f>>a>>n;
f.close();
p=n;
nr=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0){
while(n%i==0) n/=i;
p/=i;p*=(i-1);
}
}
if( n!=1 ) p=((p/n)*(n-1));
i=1;--p;
while(p)
{
if( (p&1) )
{
i*=a;
i=i%nr;
}
a*=a;
a=a%nr;
p>>=1;
}
ofstream g("inversmodular.out");
g<<i<<'\n';
g.close();
return 0;
}
