21 #include "DGtal/arithmetic/IntegerComputer.h"
26 using namespace DGtal;
30 void usage(
int,
char** argv )
32 std::cerr <<
"Usage: " << argv[ 0 ] <<
" <a> <b> <c>" << std::endl;
33 std::cerr <<
"\t - solves the diophantine equation ax+by=c by the extended Euclid algorithm." << std::endl;
34 std::cerr <<
"\t - note: c should be a multiple of gcd(a,b)." << std::endl;
40 int main(
int argc,
char** argv )
54 Integer a( argv[ 1 ] );
55 Integer b( argv[ 2 ] );
56 Integer c( argv[ 3 ] );
58 Integer g = ic.gcd( a, b );
61 std::cerr <<
"[Error] parameters a and b should be non-null." << std::endl;
64 if ( ic.isNotZero( c % g ) )
66 std::cerr <<
"[Error] parameter c should be a multiple of gcd(a,b)." << std::endl;
72 IC::Vector2I X = ic.extendedEuclid( a, b, c );
73 std::cout <<
"x=" << X[ 0 ] <<
" y=" << X[ 1 ] << std::endl;
74 Integer d = a*X[ 0 ] + b*X[ 1 ];
77 std::cerr <<
"[Internal Error] Output of extended Euclid algorithm is incorrect." << std::endl;