Pagini recente » Cod sursa (job #1041170) | Cod sursa (job #2283409) | Cod sursa (job #3190265) | Cod sursa (job #2428253) | Cod sursa (job #449048)
Cod sursa(job #449048)
/*
* File: main.cpp
* Author: virtualdemon
*
* Created on May 5, 2010, 3:02 PM
*/
#include <cstdlib>
#include <fstream>
/*
*
*/
using namespace std;
inline int pow( int x, int n, int p )
{
int r;
for( r=1; n; n>>=1 )
{
if( n&1 )
{
r=(1LL*r*x)%p;
--n;
}
x=(1LL*x*x)%p;
}
return r;
}
inline int getPhi( int N )
{
int i,phi=N;
for( i=2; i*i <= N; ++i )
if( 0 == N%i )
{
for( ; 0 == N%i; N/=i );
phi/=i; phi*=(i-1);
}
if( N > 1 )
phi/=N, phi*=(N-1);
return phi;
}
int main(int argc, char** argv)
{
int A, N;
ifstream in( "inversmodular.in" );
ofstream out( "inversmodular.out" );
in>>A>>N;
out<<pow( A, getPhi(N)-1, N )<<'\n';
return (EXIT_SUCCESS);
}