Cod sursa(job #2673726)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 17 noiembrie 2020 16:23:06
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;
long long c,a,p,n,copie,nr,i;
/*void euler()
{
    nr=0;
    for( i=1; i<n; i++)
    {
        c=__gcd(i,n);
        if(c==1) nr++;
    }
    nr--;
    p=a;
    a=1;
    while(nr)
    {
        if(nr%2==1)
        {
            a=a*p;
            a=a%n;
        }
        p=p*p;
        p=p%n;

        nr=nr/2;

    }
}*/
long long  euler(int n)
{
    p=n;copie=n;

    if(n%2==0)
    {
        p=p/2;
        while(n%2==0) n=n/2;
    }
    for(i=3; i*i<=n; i+=2)
    {
        if(n%i==0)
        {
            p=p/i;
            p*=(i-1);
            while(n%i==0) n=n/i;

        }
    }
    if(n>1)
    {
        p=p/n;
        p*=(n-1);
    }
    nr=p-1;
    p=a;
    a=1;
    while(nr)
    {
        if(nr%2==1)
        {
            a=a*p;
            a=a%copie;
        }
        p=p*p;
        p=p%copie;
        nr=nr/2;

    }

}
int main()
{
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%lld%lld",&a,&n);
    euler(n);
    printf("%lld",a%n);
    return 0;
}