Cod sursa(job #3261985)

Utilizator Sorin_GabrielGabara Sorin Gabriel Sorin_Gabriel Data 8 decembrie 2024 08:38:59
Problema Invers modular Scor 100
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#define int long long int
#define VMAX 100005
#define INF 2000000000
using namespace std;
ifstream fin ("inversmodular.in");
ofstream fout ("inversmodular.out");

int MOD = 1;

int indicatorul_euler(int nr)
{
    int nr1 = nr;
    for(int i=2;i*i<=nr;i++)
    {
        if(nr%i==0)
        {
            nr1 = nr1/i*(i-1);
            while(nr%i==0)
                nr/=i;
        }
    }
    if(nr!=1)
        nr1=nr1/nr*(nr-1);

    return nr1;
}

int fast_exp(int,int);

signed main()
{
    ios_base::sync_with_stdio(0);
    int n,a,i,j,k,t,minim,l,r,st,dr,mij,nr1,nr0;
    fin>>a>>n;
    MOD = n;
    n=indicatorul_euler(n);
    a=fast_exp(a,n-1);
    fout<<a<<'\n';


    return 0;
}

int fast_exp(int nr,int exp)
{
    if(exp==1)
        return nr;
    else if(exp%2)
    {
        return (nr*fast_exp(nr,exp-1))%MOD;
    }
    else
    {
        int a = fast_exp(nr,exp/2);
        return (a*a)%MOD;
    }
}