Cod sursa(job #657630)

Utilizator slycerdan dragomir slycer Data 6 ianuarie 2012 21:51:12
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
/* 
 * File:   Inversmodular.cpp
 * Author: slycer
 *
 * Created on January 6, 2012, 9:15 PM
 */

#include <cstdlib>
#include <fstream>
#include <iostream>
using namespace std;

int * euclid( int a, int b ){
    int ** dp = new int*[100]; 
    for ( int i=0; i<100; i++){
        dp[i] = new int[3]; 
    }
    dp[0][0] = a,dp[0][1] = 1, dp[0][2] = 0; 
    dp[1][0] = b,dp[1][1] = 0, dp[1][2] = 1; 
    int i=1; 
    while ( dp[i][0] != 0 ){
        i++; 
        int cat = dp[i-2][0]/dp[i-1][0];
        int rest = dp[i-2][0]%dp[i-1][0];
        dp[i][0] = rest;
        dp[i][1] = dp[i-2][1] - cat*dp[i-1][1];
        dp[i][2] = dp[i-2][2] - cat*dp[i-1][2];
    }
    return dp[i-1];
}

/*
 * 
 */
int main(int argc, char** argv) {
    ifstream input( "inversmodular.in" );
    ofstream output( "inversmodular.out" );
    
    int a,n; // (a * b ) % n == 1 ; (n,a) prime intre el
    input >> a >> n; 
    int * s = euclid( a, n ); 
    cout << s[0] << " " << s[1] << " " << s[2];
    cout << "\n";
    cout << -13%3;
    if ( s[1] < 0 ){
        s[1] = n + s[1]%n;
    }
    output << s[1];
    return 0;
}