#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
TYPEDEFS & ENUMS
*/
typedef unsigned int bool;
enum boolstate
{
true = 1,
false = 0
};
/*
MY MATH FUNCTIONS
*/
bool isPrime(long int num)
{
bool r = true;
int i;
for (i = 2; i < num; i++)
{
if ((num % i) == 0) r = false;
}
return r;
}
bool isDivisor(const long int div, const long int num)
{
if ((num % div) == 0) return true; else return false;
}
/*
MAIN
*/
int main(void)
{
long int n;
long int i;
long int d;
int j;
int tmp;
long int r[24][2];
long int rn;
printf("\n Number Scomposer\nwritten in C by Gi@cky98\n\nUsage: write number to scompose. Write 0 to exit.\n\n");
begin:
printf("Number to scompose: ");
scanf("%i", &tmp);
n = (long int)tmp;
if (!n) return 0;
for (i = 0; i < 24; i++)
{
r[i][0] = 0;
r[i][1] = 0;
}
rn = 0;
while (n != 1)
{
for (i = 2; i <= n; i++)
{
if ((isPrime(i) == true) && (isDivisor(i, n) == true))
{
tmp = 0;
n = n / i;
for (j = 0; j < rn; j++)
{
if (r[j][0] == i) { r[j][1]++; tmp = 1; break;}
}
if (!tmp) { r[rn][0] = i; r[rn][1]++; rn++; }
}
}
}
printf("Result: %i^%i", (int)r[0][0], (int)r[0][1]);
for (j = 1; j < rn; j++)
{
printf(" * %i^%i", (int)r[j][0], (int)r[j][1]);
}
printf("\n\n");
goto begin;
return 0;
}