Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 34


}

return s;

}

Программа 2_19.pas

program loop cub

{ Поиск циклов при суммировании кубов цифр }

uses Crt; label ml; var

N:longint;

Q:array [1..6562] of integer; i:integer;

function n_kub(N:longint):integer;

{ Преобразование числа в -сумму кубов его цифр }

var

s,k:integer; begin s:=0;

while (N<>0) do begin

k:=N mod 10;

N:=N div 10; { Выделение очередной цифры }

s:=s+k*k*k; { Накопление суммы кубов }

end;

n kub:=s;

end;

begin clrscr;

write('Введите число');

readln(N);

for i:=l to 6562 do Q[i]:=0;

{ Очистка массива Q}

i:=l;

Q[N]:=1;

ml:

writeln('Шar=',i:2, ' N=',N);

N:=n_kub{N);

if Q[N]<>0 then { He было ли раньше такого же числа ?}

begin

writeln('Ha шаге ',1+1:2,' обнаружен цикл');

readln;

halt;

end;

inc(1); { Счетчик числа шагов )

Q[N]:=i; { Запоминание счетчика в массиве Q }

goto ml;

end.

Задание 2.20. Разложение числа на простые множители

Составить программу, которая выдает разложение заданного целого числа N на простые множители. Например:

128 = 2*2*2*2*2*2*2 17 = простое число

Совет 1 (общий)

Самый простой способ заключается в попытке делить N на числа k = 2, 3, ... до тех пор, пока N делится. Очевидно, что перебор делителей k не имеет смысл продолжать для k > N/2. Переменная j в программах используется как признак того, что был найден хотя бы один нормальный делитель. Нулевое значение J означает, что исходное число — простое.

Программа 2_20.bas

RЕМ Разложение числа на простые множители

CLS

К& = 2: J% = 0

INPUT "Введите целое число: ", М&: М1& = Ms / 2

PRINT M&; "=";

Ml:

IF MS MOD K&=0 THEN

J=l: M&=M&/K&: PRINT K&;

IF M&<>l THEN PRINT "*";

ELSE K&=K&+1

END IF

IF K&<=M1& THEN GOTO Ml

IF J=0 THEN PRINT " простое число"

END

Программа 2_20.с

/* Разложение числа на простые множители */

#include <stdio.h>

#include <conio.h>

main() {

long M,M1,k=2;




- Начало -  - Назад -  - Вперед -