Pagini recente » Cod sursa (job #2478935) | Cod sursa (job #746958) | Cod sursa (job #503673) | Cod sursa (job #1444922) | Cod sursa (job #437275)
Cod sursa(job #437275)
/*
* File: main.cpp
* Author: VirtualDemon
*
* Created on April 9, 2010, 3:44 PM
*/
#include <cstdlib>
#include <fstream>
/*
*
*/
using namespace std;
inline int pow( int A, int PhiN, int N )
{
int r=1;
for( ; PhiN; PhiN>>=1 )
{
if( PhiN&1 )
{
r=(1LL*A*r)%N;
--PhiN;
}
A=(1LL*A*A)%N;
}
return r;
}
inline int GetPhiN( 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( void )
{
int A, N;
ifstream in( "inversmodular.in" );
ofstream out( "inversmodular.out" );
in>>A>>N;
out<<( pow( A, GetPhiN(N)-1, N ) )<<'\n';
return EXIT_SUCCESS;
}