Форум » C/C++ для начинающих (C/C++ for beginners) » Вывести на консоль представление целого числа в виде набора его простых делителей. » Ответить

Вывести на консоль представление целого числа в виде набора его простых делителей.

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

Ответов - 0



полная версия страницы