Pagini recente » Cod sursa (job #1823258) | Cod sursa (job #453704) | Cod sursa (job #1883663) | Cod sursa (job #2661799) | Cod sursa (job #1826958)
#include <iostream>
#include<fstream>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
int a,n;
void Citire()
{
fin>>a>>n;
}
inline int Fi(int x)
{
int d=2,fi;
fi=n;
while(x>1 && d*d<=x)
{
if(x%d==0)
{
fi=(fi/d)*(d-1);
while(x%d==0)
x/=d;
}
d++;
}
if(x>1)fi=(fi/x)*(x-1);
return fi;
}
inline int Putere(int x,int y)
{
int sol=1;
while(y)
{
if(y%2==1)
{
sol=(1LL*sol*x)%n;
y--;
}
y/=2;
x=(1LL*x*x)%n;
}
return sol;
}
int main()
{
int x;
Citire();
///Mica teorema a lui Fermat:a^(fi(n))%n==1 ,(a,n)=1
x=Fi(n)-1;
fout<<Putere(a,x)<<"\n";
fin.close();
fout.close();
}