Cod sursa(job #1119116)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 24 februarie 2014 15:25:06
Problema Invers modular Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>

typedef long long lli;

typedef struct {
     lli a, n;
} pair;

int main( ) {
    FILE * fin, * fout;
    fin = fopen( "inversmodular.in", "r" );
    fout = fopen( "inversmodular.out", "w" );

    lli A, N;
    fscanf( fin, "%lld%lld", &A, &N );

    pair p1, p2;
    p1.a = 1;
    p1.n = 0;
    p2.a = 0;
    p2.n = 1;

    while( p2.a * A + p2.n * N ) {
        lli q = ( p1.a * A + p1.n * N ) / ( p2.a * A + p2.n * N ); 
        pair aux = p1;
        p1 = p2;
        p2.a = aux.a - q * p2.a;
        p2.n = aux.n - q * p2.n;
    }

    printf( "%lld %lld\n", p1.a, p1.n );

    if( p1.a < 0 ) {
        p1.a =  N - ( -p1.a ) % N;
    } else {
        p1.a = p1.a % N;
    }

    fprintf( fout, "%lld\n", p1.a );

    fclose( fin );
    fclose( fout );
}