Pagini recente » Cod sursa (job #263373) | Cod sursa (job #968656) | Cod sursa (job #766101) | Cod sursa (job #1517290) | Cod sursa (job #1313969)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
long long a,n,phi,c,i,j;
bitset <100001> viz;
long long ridicare(long long i,long long n)
{
long long d;
if (n==0)
return 1;
else
{
d=ridicare(i,n/2);
if (n%2==1)
return ((((i%c)*(d%c))%c)*(d%c))%c;
else return ((d%c)*(d%c))%c;
}
}
int main()
{
f>>a>>n;
c=n;
phi=1;
if (n%2==0){
while(n%2==0)
phi*=2,n/=2;
phi/=2;
}
for (i=3;i*i<=n;i+=2)
if (viz[i]==false)
{
if (n%i==0)
{
while(n%i==0)
phi*=i,n=n/i;
phi/=i;
phi*=i;
}
for (j=i*i;j*j<=n;j+=i)
viz[j]=true;
}
if (n>1) phi*=(n-1);
g<<ridicare(a,(phi-1));
return 0;
}