Cod sursa(job #1189191)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 21 mai 2014 19:22:18
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
int fi(long long cn){
    long long i,r,n=cn,pp=0;
    double put=1,rez=cn;
    while(cn%2==0){
        pp=1;
        cn/=2;
    }
    if(pp==1){
        put=1/2;
        rez*=(1-put);
    }
    for(i=3;i*i<=cn;i+=2){
        pp=0;
        while(cn%i==0){
            pp=1;
            cn/=i;
        }
        if(pp==1){
            put=1/i;
            rez*=(1-put);
        }
    }
    r=rez;
    if(r==n)
        r--;
    return r;
}
int put(long long f,long long p,long long n){
    long long rez=1;
    while(p!=0){
        if(p%2==1){
            rez*=f%n;
            p--;
        }
        else{
            f*=f%n;
            p/=2;
        }
    }
    return rez;
}
int main(){
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
long long n,cn,a,p;
scanf("%lld%lld",&a,&n);
cn=n;
p=fi(cn);
p--;
p=put(a,p,n);
p%=n;
printf("%lld",p);
return 0;
}