Cod sursa(job #1190215)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 24 mai 2014 19:00:26
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
int fi(long long cn){
    long long i=2,n=cn,pp=0;
    double put=1,rez=cn;
    while(i*i<=cn){
        int pp=0;
        while(cn%i==0){
            cn/=i;
            pp=1;
        }
        if(pp==1){
            put=(double)1/(double)i;
            rez*=(1-put);
        }
        i++;
        while(cn%i!=0&&i*i<=cn)
            i++;
    }
    if(cn!=1){
        put=(double)1/(double)cn;
        rez*=(1-put);
    }
    return rez;
}
int put(long long f,long long p,long long n){
    long long rez=1;
    while(p!=0){
        if(p%2==1){
            rez=(rez*f)%n;
            p--;
        }
        else{
            f=(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=p%n;
    printf("%lld",p);
    return 0;
}