// file: GcdCalculator.cpp
// iterative 10 variants

#include <cstdlib>
#include <iostream>

	int gcd01 (int p, int q)
	{
		int r;
		p = abs(p);
		q = abs(q);
		while (q > 0)
		{
			r = p % q;
			p = q;
			q = r;
		}
		return p;
	}
	
	int gcd02 (int p, int q)
	{
		int r; 
		for (p = abs(p), q = abs(q); q > 0; )
		{
			r = p % q;
			p = q;
			q = r;
		}
		return p;
	}

	int gcd03 (int p, int q)
	{
		int r;
		for (p = abs(p), q = abs(q); q > 0; q = r)
		{
			r = p % q;
			p = q;
		}
		return p;
	}

	int gcd04 (int p, int q)
	{
		int r;
		for (p = abs(p), q = abs(q); q > 0; p = q, q = r)
		{
			r = p % q;
		}
		return p;
	}

	int gcd05 (int p, int q)
	{
		int r;
		for (p = abs(p), q = abs(q); q > 0; r = p % q, p = q, q = r);
		return p;
	}

	int gcd06 (int p, int q)
	{
		int r;
		while (q != 0)
		{
			r = p % q;
			p = q;
			q = r;
		}
		return abs(p);
	}
	
	int gcd07 (int p, int q)
	{
		for (int r = 0; q != 0; )
		{
			r = p % q;
			p = q;
			q = r;
		}
		return abs(p);
	}

	int gcd08 (int p, int q)
	{
		for (int r; q != 0; q = r)
		{
			r = p % q;
			p = q;
		}
		return abs(p);
	}

	int gcd09 (int p, int q)
	{
		for (int r; q != 0; p = q, q = r)
		{
			r = p % q;
		}
		return abs(p);
	}

	int gcd10 (int p, int q)
	{
		for (int r; q != 0; r = p % q, p = q, q = r);
		return abs(p);
	}

	int main (int argc, char * argv[])
	{
		if (argc < 3)
		{
			std::cout << "Please call the gcd calculator with two integer arguments!";
		} 
		else
		{
		 	int p = std::atoi(argv[1]);
		 	int q = std::atoi(argv[2]);
			std::cout << gcd01(p, q) << std::endl
					  << gcd02(p, q) << std::endl
					  << gcd03(p, q) << std::endl
					  << gcd04(p, q) << std::endl
					  << gcd05(p, q) << std::endl
					  << gcd06(p, q) << std::endl
					  << gcd07(p, q) << std::endl
					  << gcd08(p, q) << std::endl
					  << gcd09(p, q) << std::endl
					  << gcd10(p, q) << std::endl;
		}
		return 0;
	}
