Cod sursa(job #1313972)

Utilizator Darius15Darius Pop Darius15 Data 11 ianuarie 2015 13:14:26
Problema Invers modular Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#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 rec(int p)
{
    long long x,u=1;
    if (p==0)
    return 1;
    else
    {
        x=rec(p/2);
        x=x%c;
        u=x*x;
        u=u%c;
        if (p%2==1) u=u*a;
        u=u%c;
        return u;

    }
}
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<<rec((phi-1));
    return 0;
}