Cod sursa(job #1537572)

Utilizator lauratalaatlaura talaat lauratalaat Data 27 noiembrie 2015 15:47:24
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
long long n;
long long r ( long long a , long long b){
    long long p=1;
    while(b!=0){
        if(b%2==1){
            p=(p%n)*a;
            b--;
        }
        a=(a*a)%n;
        b=b/2;
    }
    return (p%n);
}

int main(){
    long long i,a1,putere,copie,x;
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%I64d",&a1);
    scanf("%I64d",&n);
    putere=n;copie=n;
    for(i=2;i*i<=n;i++)
        if(n%i==0){
            putere=putere/i;
            putere=putere*(i-1);
            while(n%i==0)
                n/=i;
        }
    if(n!=1){
        putere=putere/n;
        putere=putere*(n-1);
    }
    n=copie;
    a1=a1%copie;
    x=r(a1,putere-1);
    printf("%I64d",x);
    return 0;
}