Cod sursa(job #2124467)

Utilizator alxcl12Albu Alexandru alxcl12 Data 7 februarie 2018 11:22:30
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>

std::ifstream f("inversmodular.in");
std::ofstream g("inversmodular.out");

using namespace std;


long long n;

long long my_pow(long long a,long long b)
{
    long long r=1;
    while(b)
    {
        if(b%2)
        {
            r=(a%n)*(r%n);
            r%=n;
        }
        a*=a;
        a%=n;
        b/=2;
    }
    return r;
}

int main()
{
    long long a;
    f>>a>>n;
    long long fi;
    fi=n;
    bool k;
    long long i;
    long long cop;
    cop=n;

        for(i=2; i*i<=cop; i++)
        {
            k=false;
            while(cop%i==0)
            {
                cop/=i;
                k=true;
            }
            if(k) fi=(fi/i) * (i-1);
        }

        if(cop>1) fi=(fi/cop) * (cop-1);


        g<<my_pow(a,fi-1);


    return 0;
}