Pagini recente » Cod sursa (job #1094933) | Cod sursa (job #1230927) | Cod sursa (job #140990) | Cod sursa (job #1364851) | Cod sursa (job #657630)
Cod sursa(job #657630)
/*
* 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;
}