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


         

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


}

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;

Содержание  Назад  Вперед