Другие языки программирования и технологии

Требуется напечатать разложение заданного числа n на простые множители.

При этом каждый множитель должен быть напечатан столько раз, сколько раз он встречается в разложении. Формат входных данных
Входной файл содержит натуральное число n (2≤n≤104).
Формат выходных данных
Выведите через пробел все простые делители числа n в порядке возрастания.
Black Shadow
Black Shadow
178
var n, i:integer;
begin
{создание входного файла с числом наугад}
assign(output,'input.txt');
rewrite(output);
n:=2 + random (9999); {104 = 10 в степени 4}
writeln (output, n);
close (output);

{чтение данных из файла}
assign(input,'input.txt');
reset(input);
readln (n);
close(input);
i:=1;
while n > 1 do
begin
inc(i);
while n mod i = 0 do
begin
write (i,' ');
n:= n div i;
end;
end;
end.
Роман Строганов
Роман Строганов
20 124
Лучший ответ
type
tSpis = ^rSpis;
rSpis = record
N, K : Integer;
Next : tSpis;
end;

var
N0, N, D : Integer;
First, Last, Cur : tSpis;

procedure AddSpis(N : Integer);
begin
Cur := First;
while (Cur <> nil) and (Cur^.N <> N) do
Cur := Cur^.Next;
if Cur = nil then
begin
New(Cur);
Cur^.N := N;
Cur^.K := 1;
Cur^.Next := nil;
if First = nil then
First := Cur
else
Last^.Next := Cur;
Last := Cur;
end
else
Inc(Cur^.K);
end;

procedure OutSpis;
begin
Cur := First;
repeat
Write(Cur^.N);
if Cur^.K > 1 then Write('^', Cur^.K);
Cur := Cur^.Next;
if Cur <> nil then Write(' x ');
until Cur = nil;
end;

begin
Write('Введите N = '); ReadLn(N0);
N := N0;
First := nil;

while not Odd(N) do
begin
AddSpis(2);
N := N shr 1;
end;

D := 3;
while D*D < N do
if N mod D = 0 then
begin
AddSpis(D);
N := N div D;
end
else
Inc(D, 2);

if D*D > N then
AddSpis(N);

if First <> Last then
begin
Write('Число ', N0, ' можно разложить на простые множители: ');
OutSpis;
WriteLn;
end
else
WriteLn('Число ', N0, ' простое.');
end.
посмотри эту прогу
uses crt; // Получить все простые делители
Var n, i,j: integer;
g:boolean;
Begin;
Readln(n);
For i := 1 to n do begin
If (n mod i = 0) then begin
g := true;
for j := 2 to i-1 do g := g and (i mod j <> 0);
if g then write (i,' ');
end;
end;
End.
Семен Сірик
Семен Сірик
95 955

Похожие вопросы