Cod sursa(job #1313969)

Utilizator Darius15Darius Pop Darius15 Data 11 ianuarie 2015 13:11:12
Problema Invers modular Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 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 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;
}