var i,j,n:longint; f:boolean; begin writeln('Введите число'); readln(n); if n<2 then writeln('Простых делителей нет') else begin write('Число ',n,' ','= 1'); for i:=2 to n do if n mod i=0 then begin f:=true; j:=2; while f and(j<=round(sqrt(i/2)))do begin if i mod j=0 then f:=false else j:=j+1; end; if f then write('*',i); end; end; end.
var i,j,n:longint;
f:boolean;
begin
writeln('Введите число');
readln(n);
if n<2 then writeln('Простых делителей нет')
else
begin
write('Число ',n,' ','= 1');
for i:=2 to n do
if n mod i=0 then
begin
f:=true;
j:=2;
while f and(j<=round(sqrt(i/2)))do
begin
if i mod j=0 then f:=false
else j:=j+1;
end;
if f then write('*',i);
end;
end;
end.
Тестовое решение:
Введите число
2345
Число 2345 = 1*5*7*35*67
1) выписываем остатки (те что в скобках 1 или 0 с последнего числа полученного при делении )
104 / 2 = 52 остаток (0)
52 / 2 = 26 остаток (0)
26 / 2 = 13 остаток (0)
13 / 2 = 6 остаток (1)
6 / 2 = 3 остаток (0)
3 / 2 = 1 (<== начинаем выписывать с этого числа) остаток (1) <= следующее
ответ: 1101000
2)
510 / 2 = 255 остаток (0)
255 / 2 = 127 остаток (1)
127 / 2 = 63 остаток (1)
63 / 2 = 31 остаток (1)
31 / 2 = 15 остаток (1)
15 / 2 = 7 остаток (1)
7 / 2 = 3 остаток (1)
3 / 2 = 1(<== первое число) остаток (1)
ответ : 111111110
3)
634 / 2 = 317 остаток (0)
317 / 2 = 158 остаток (1)
158 / 2 = 79 остаток (0)
79 / 2 = 39 остаток (1)
39 / 2 = 19 остаток (1)
19 / 2 = 9 остаток (1)
9 / 2 = 4 остаток (1)
4 / 2 = 2 остаток (0)
2/ 2 = 1 (<== первое число)остаток (1)
ответ : 1101111010
4) число 731 попробуйте сделать сами для понимания
II)
1)
10111 нумеруем все цифры с права налево (первый номер-0)
1(4) 0(3) 1(2) 1(1) 1(0)
далее схема такая 1*2 в четвёртой степени(4) + 0 * 2 в третьей(3)+1*2 во второй(2) + 1*2 в первой(1) +1*2 в нулевой (0)
и так мы получаем 16+0+4+2+1=23
2) 110011 нумеруем 1(5) 1(4) 0(3) 0(2) 1(1) 1(0)
1*2 в пятой +1*2 в четвёртой +1*0 в третьей +1*0 во второй +1*2 первой +1*2 в нулевой=32+16+0+0+2+1=51
два других сделайте сами для тренировки