Pagini recente » Cod sursa (job #607483) | Cod sursa (job #1554458) | Cod sursa (job #1435726) | Cod sursa (job #2739575) | Cod sursa (job #423205)
Cod sursa(job #423205)
/*
* File: main.cpp
* Author: virtualdemon
*
* Created on March 23, 2010, 4:30 PM
*/
#include <cstdio>
#include <cstdlib>
/*
*
*/
using namespace std;
inline int pow( int A, int phi, int N )
{
int Aphi=1;
for( ; phi; phi>>=1 )
{
if( phi&1 )
{
Aphi=(1LL*Aphi*A)%N;
--phi;
}
A=(1LL*A*A)%N;
}
return Aphi;
}
inline int getphi( int N )
{
int phi=N, i, nr;
for( i=2; i*i <= N; ++i )
{
if( 0 == N%i )
{
for( nr=0; 0 == N%i; N/=i, ++nr );
phi/=i; phi*=(i-1);
}
}
if( N > 1 )
phi/=N, phi*=(N-1);
return phi;
}
int main( void )
{
int A, N;
fscanf( fopen( "inversmodular.in", "rt" ), "%d%d", &A, &N );
fprintf( fopen( "inversmodular.out", "wt" ), "%d", pow( A, getphi(N)-1, N ) );
return EXIT_SUCCESS;
}