
//  This program finds the factors for an integer 


#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>


#define MAX 10000000

unsigned long i,inum,istore,j,k;
unsigned long num[100];

double error;

int iflag = 0;

FILE *pFile[1];
char filename[1][15];

void main()
{

	printf("\n\n factor.cpp  version 1.0 \n");
	printf("\n By Tom Irvine   Email:  tomirvine@aol.com \n");


	printf("\n Enter an integer \n");
    scanf("%ld",&inum);

	if(double(inum) > 2.0e+08)
	{
		printf("\n Error: input value is too high.\n");
		exit(1);
	}

	istore=inum;
    
	k=0;

	while(1)
	{
		for(i=2; i<= inum/2; i++)
		{
			error= (double(inum)/double(i))-double(unsigned long(double(inum)/double(i)));

			if(fabs(error) < 1.0e-12)
			{
        
				iflag=1;

				num[k]=i;
				k++;

				inum=unsigned long(double(inum)/double(i));


				break;
			}
		}
	    if(num[0]==istore){iflag=0;}

		if(iflag==0 || inum <2)
		{
			break;
		}
		if( i > inum/2 && iflag ==1 )
		{
			num[k]=inum;
			k++;

			break;
		}
	}




    if(iflag==0)
	{
		printf("\n\n %ld is a prime number. \n",istore);
	}
	else
	{
		printf("\n\n factors \n");

		for(i=0; i<k; i++)
		{
			printf(" %ld \n",num[i]);
		}
	}

	printf("\n\n Calculation complete. \n\n Press any key to exit. \n\n");
	getch();
}
