Эта тема создана на основе данного вопроса на
Stackoverflow Decompose a number to product of prime numbers and print it like 18=2*3^2 Задание состоит в следующем. Если имеется число, например,
18, то надо вывести на консоль его представление в виде произведения его простых делителей, то есть нужно получить
18 = 2*3^2
Задание мне показалось интересным. Было немало комментариев к вопросу, но на момент появления этого вопроса только я представил решение задания.
Ниже показана соответствующая программа на
C.
#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;
}
Вывод на консоль, к примеру, может выглядеть следующим образом:
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
Я достаточно быстро написал программу, так как вспомнил, что нечто подобное я уже делал. И, действительно, на своем форуме я нашел ранее созданную мною похожую тему
Рекурсивный вывод простых делителей числа на консоль в C++ Думаю, обе эти темы будут полезны для начинающих программистов. тем более. что они дополняют друг друга.
