Cod sursa(job #1521000)

Utilizator Darius15Darius Pop Darius15 Data 9 noiembrie 2015 20:07:49
Problema Invers modular Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>

using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
int a,n,p,i,l,c;
long long pow,ans;
int main()
{
    f>>a>>n;
    l=n;
    p=1;
    if (n%2==0)
    {
      n/=2;
      while(n%2==0)
        n/=2,p*=2;
    }
    for (i=3;i*i<=n;i+=2)
    if (n%i==0){
    n/=i;
    p*=(i-1);
    while(n%i==0)
      n/=i,p*=i;
    }
    if (n>1)
       p*=(n-1),n=1;
    p--;
    ans=1;
    pow=a%l;
    for (i=0;(1<<i)<=p;i++)
    {
       if (p & (1<<i))
         ans=((ans%l)*(pow%l))%l;
       pow=((pow%l)*(pow%l))%l;
    }
    g<<ans<<' ';
    return 0;
}