Cod sursa(job #2124450)

Utilizator alxcl12Albu Alexandru alxcl12 Data 7 februarie 2018 11:11:57
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 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;
}

bool prim(long long n)
{
    if(n<2) return false;
    for(int j=2; j*j<=n; j++)
        if(n%j==0) return false;
    return true;
}

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

        for(int i=2; i*i<=n; i++)
        {
            k=0;
            while(n%i==0)
            {
                n/=i;
                k=1;
            }
            if(k==1) fi=(fi/i) * (fi-1);
        }
        if(n>1) fi=(fi/n)*(n-1);

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


    return 0;
}