Cod sursa(job #3239815)

Utilizator AllerAller Aller Aller Data 7 august 2024 18:21:50
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int dim=2000001;
int vf[dim], mod;

void ciur(int n){
    for(int i=1; i<=n; i++){
        vf[i]=i;
    }
    for(int i=2; i<=n; i++){
        if(vf[i]==i){
            for(int j=1; j*i<=n; j++){
                vf[j*i]=vf[j*i]/i*(i-1);
            }
        }
    }
}

int exp(int n, int x){
    int rez=1;
    while(x>0){
        if(x%2==1){
            rez=(rez*n)%mod;
        }
        n=(n*n)%mod; x/=2;
    }
    return rez;
}

int main()
{
    int n;
    f>> n >> mod;
    ciur(mod);
    if(vf[mod]==mod-1){
        g<< exp(n, mod-2);
    } else {
        g<< exp(n, vf[mod]);
    }

    return 0;
}