On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 16.08.19 15:31. Заголовок: Вывести на консоль представление целого числа в виде набора его простых делителей.


Эта тема создана на основе данного вопроса на 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++
Думаю, обе эти темы будут полезны для начинающих программистов. тем более. что они дополняют друг друга.

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 52
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет