Cod sursa(job #1189336)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 22 mai 2014 14:29:39
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
int fi(long long cn){
    long long i=2,r,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)2;
        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;
}