We, beginners, should help each other.:)
Here you are.
#include <stdio.h>
void decompose( unsigned int n )
{
const unsigned int FIRST_PRIME = 2;
printf( "%u = ", n );
if ( n < FIRST_PRIME )
{
printf( "%u\n", n );
}
unsigned int m = FIRST_PRIME;
while ( n > 1 )
{
unsigned int i = 0;
while ( n % m == 0 )
{
++i;
n /= m;
}
if ( i != 0 )
{
printf( "%u", m );
if ( i != 1 )
{
printf( "^%u", i );
}
if ( n != 1 ) putchar( '*' );
}
m = m == FIRST_PRIME ? 3 : m + 2;
}
}
int main(void)
{
while ( 1 )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
decompose( n );
putchar( '\n' );
}
return 0;
}
The program output might look the following way
Enter a non-negative number (0 - exit): 1
1 = 1
Enter a non-negative number (0 - exit): 2
2 = 2
Enter a non-negative number (0 - exit): 3
3 = 3
Enter a non-negative number (0 - exit): 4
4 = 2^2
Enter a non-negative number (0 - exit): 5
5 = 5
Enter a non-negative number (0 - exit): 6
6 = 2*3
Enter a non-negative number (0 - exit): 7
7 = 7
Enter a non-negative number (0 - exit): 8
8 = 2^3
Enter a non-negative number (0 - exit): 9
9 = 3^2
Enter a non-negative number (0 - exit): 10
10 = 2*5
Enter a non-negative number (0 - exit): 11
11 = 11
Enter a non-negative number (0 - exit): 12
12 = 2^2*3
Enter a non-negative number (0 - exit): 13
13 = 13
Enter a non-negative number (0 - exit): 14
14 = 2*7
Enter a non-negative number (0 - exit): 15
15 = 3*5
Enter a non-negative number (0 - exit): 16
16 = 2^4
Enter a non-negative number (0 - exit): 17
17 = 17
Enter a non-negative number (0 - exit): 18
18 = 2*3^2
Enter a non-negative number (0 - exit): 19
19 = 19
Enter a non-negative number (0 - exit): 20
20 = 2^2*5
Enter a non-negative number (0 - exit): 0
As for your code then for example even the function checkprime
is invalid. It returns 1 at least for the numbers 1 and 4 but these numbers are not primes.:)
unsigned checkprime (int i){
for (int j=2;j<i/2;j++) {
if(i%j==0)
return 0;
}
return 1;
}