На входе дано несколько чисел. Каждое число разложите на простые. Каждое разложение должно быть записано в отдельной строчке. Если число состоит из нескольких простых, то простые должны быть разделены пробелом. Все числа положительные и меньше 2^31.
Вопрос в написать программу. Я воспользовался уже имеющимися решениями. Вот что полоучилось:
procedure Factorization(x: word); var i: word; procedure DivX; begin while (x>1) and (x mod i = 0) do begin write(i:4); x:= x div i; end; end; begin i:=2; DivX; i:=3; while (i < x div 2) do begin DivX; inc(i,2); end; if x>1 then writeln(x:15); end;
Эта прога решает приведенный выше пример, но есть баги: например если первое число 9, а второе 15, то ответ - разложение первого и второго числа она выводит на одной строчке, а должна на разних. Не могу решить, самого важного: кол-во чисел неопределено и разложение должно работать для чисел до 2 в 31-ой.
Lapp
28.10.2008 7:14
Н-да.. Впервые вижу ТАКОЙ нечесаный код... Даже арифметические операторы гуляют по строчкам безо всякой нужды.. Короче, вот, поработал над твоим текстом. Ошибки исправил и много чего еще. Но там все равно еще далеко до зачетного варианта . Разбирайся:
procedure Factorization(x: word); var i: word;
procedure DivX; begin while (x>1) and (x mod i = 0) do begin write(i,' '); x:= x div i; end; end;
begin i:=2; DivX; i:=3; while (i < x div 2) do begin DivX; inc(i,2); end; if x>1 then writeln(x) else WriteLn; end;
Что касается нефиксированного числа вводимых параметров, то самый простой выход такой:
repeat readln (a); if a>1 then Factorization(a); until a=0;
Но он перемежает вводимые числа и результаты. Если это тебя смущает - надо запоминать входные данные в массив: читать ввод в цикле до ввода нуля, считая количество введенных чисел, а потом все в цикле же и обработать.
Lapp
28.10.2008 8:03
Еще одна проблема - с диапазоном чисел. У тебя вообще тип word, что ограничивает все числом 65535. Замени его на LongInt.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.