Home
Andy's Blog - Project Euler, Project 3 [entries|archive|friends|userinfo]
Andy

[ website | Portal: Andy ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Project Euler, Project 3 [Feb. 11th, 2009|11:48 pm]
Previous Entry Add to Memories Tell a Friend Next Entry
[Tags|]

http://projecteuler.net/index.php?section=problems&id=3

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>
#include <iostream>

using namespace std;

long long numbers[100];
int cnt = 0;

int IsMultiple(long long nmbr, long long mtpl)
{
        int yesno = 0;
        long long multiplier = (long long)floor(nmbr / mtpl);
        long long temp = mtpl * multiplier;

        if (temp == nmbr)
        {
		yesno = 1;
        }
	
	return yesno;
}

int IsPrime(long long number)
{
	int yesno = 0;

	for (long long x = 2; x < number; x++)
	{
		if (IsMultiple(number, x))
		{
			yesno = 1;
			break;
		}
	}

	return yesno;
}

long long CheckMultiple(long long number)
{
	long long retval = 0;
	
        for (long long x = 2; x < number; x++)
	{
		if (IsMultiple(number, x))
		{
                        retval = x;
                        break;
                }
        }
	
	return retval;
}

int main()
{
	long long number = 600851475143LL, nhalf = 0, max = 0;
	
	nhalf = number;
	
	while (nhalf > 0)
	{
		long long temp = CheckMultiple(nhalf);

		if (temp > 0)
		{
			nhalf = nhalf / temp;

			numbers[cnt] = temp;

			if (!IsPrime(temp) && !IsPrime(nhalf))
			{
				cnt++;

				numbers[cnt] = nhalf;
				
				break;
			}
		}
		
		cnt++;
	}

	while (cnt >= 0)
	{
		if (max < numbers[cnt])
		{
			max = numbers[cnt];
		}
		cout << numbers[cnt] << endl;
		cnt--;
	}

	cout << endl << max << endl;
	
	return 0;
}



As a reminder, I'm working through the Project Euler problems as a refresher to beef up my C++ skills. Also, I'm turbov21 on the site, though I have yet to post to the forums. Thanks to [info]stoneself for keeping me on the long long, and keeping me from trying to use a BigNum library.
LinkReply