Cod sursa(job #1540939)

Utilizator Tavi44Grosu Octavian-Alexandru Tavi44 Data 3 decembrie 2015 15:44:25
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
using namespace std;
bool ciur[44722];
int pawa(int a,int p,int n)
{
  int rez=1;
  while(p!=0)
  {
    if(p%2==1)
    {
      rez=(rez*a)%n;
      p--;
    }
    else
    {
        a=(a*a)%n;
        p/=2;
    }
  }
  return rez;
}
int main()
{
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    int x,y,phi,cy;
    scanf("%d%d",&x,&y);
    phi=y;
    cy=y;
    for(int i=2;i*i<=44722;++i)
    {
       if(ciur[i]==0)
       {
          int ci=i*i;
          while(ci<=44722)
          {
             ciur[ci]=1;
             ci+=i;
          }
       }
    }
    for(int i=2;i*i<=y && y!=1;++i)
    {
        if(ciur[i]==0 && y%i==0)
        {
           while(y%i==0)
              y/=i;
           phi/=i;
           phi*=i-1;
        }
    }
    if(y!=1)
     {
        phi/=y;
        phi*=y-1;
     }
    printf("%d",pawa(x,phi-1,cy));
    return 0;
}