Mercurial > hg > qm-dsp
changeset 125:5351b5e9ad9f
Add gcd
author | Chris Cannam |
---|---|
date | Tue, 08 Oct 2013 17:23:17 +0100 |
parents | 263181813eec |
children | 7669b3aa3bc9 |
files | maths/MathUtilities.cpp maths/MathUtilities.h tests/TestMathUtilities.cpp |
diffstat | 3 files changed, 25 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/maths/MathUtilities.cpp Fri Oct 04 18:46:32 2013 +0100 +++ b/maths/MathUtilities.cpp Tue Oct 08 17:23:17 2013 +0100 @@ -390,3 +390,14 @@ return f; } +int +MathUtilities::gcd(int a, int b) +{ + int c = a % b; + if (c == 0) { + return b; + } else { + return gcd(b, c); + } +} +
--- a/maths/MathUtilities.h Fri Oct 04 18:46:32 2013 +0100 +++ b/maths/MathUtilities.h Tue Oct 08 17:23:17 2013 +0100 @@ -66,6 +66,8 @@ static int nearestPowerOfTwo(int x); // e.g. 1300 -> 1024, 12 -> 16 (not 8) static int factorial(int x); + + static int gcd(int a, int b); }; #endif
--- a/tests/TestMathUtilities.cpp Fri Oct 04 18:46:32 2013 +0100 +++ b/tests/TestMathUtilities.cpp Tue Oct 08 17:23:17 2013 +0100 @@ -133,6 +133,18 @@ BOOST_CHECK_EQUAL(MathUtilities::factorial(4), 24); } +BOOST_AUTO_TEST_CASE(gcd) +{ + BOOST_CHECK_EQUAL(MathUtilities::gcd(1, 1), 1); + BOOST_CHECK_EQUAL(MathUtilities::gcd(2, 1), 1); + BOOST_CHECK_EQUAL(MathUtilities::gcd(2, 3), 1); + BOOST_CHECK_EQUAL(MathUtilities::gcd(4, 2), 2); + BOOST_CHECK_EQUAL(MathUtilities::gcd(18, 24), 6); + BOOST_CHECK_EQUAL(MathUtilities::gcd(27, 18), 9); + BOOST_CHECK_EQUAL(MathUtilities::gcd(18, 36), 18); + BOOST_CHECK_EQUAL(MathUtilities::gcd(37, 18), 1); +} + BOOST_AUTO_TEST_SUITE_END()