| Project Euler, Project 3 |
[Feb. 11th, 2009|11:48 pm] |
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 stoneself for keeping me on the long long, and keeping me from trying to use a BigNum library. |
|
|