Цитата:
Сообщение от Света=)
1) Дано натуральное число N. Получить в порядке возрастания N первых натуральных чисел, которые не делятся ни на какие простые числа, кроме 2, 3 и 5.
|
Да, интересная задачка - пришлось-таки голову поломать. Но вот что прискорбно: условие можно толковать двояко:
1. Отселектировать числа, которые делятся ХОТЯ БЫ НА ОДНО из чисел (2, 3, 5) и не содержат никаких других простых множителей. Этому условию отвечают 2, 3, 4, 5, 6, 8, 9, 10 и т.д. Программа поиска таких чисел выглядит так:
Код:
VAR
N,i,m:Byte;
A,B,d:LongInt;
BEGIN
Write('N (<256) = ');
ReadLn(N);
A:=0;
i:=0;
Repeat
A:=A+1;
B:=A;
repeat
d:=B div 2;
m:=B mod 2;
B:=d;
until (m>0) or ((B=1) and (m=0));
If m>0 then
begin
B:=B*2+m;
repeat
d:=B div 3;
m:=B mod 3;
B:=d;
until (m>0) or ((B=1) and (m=0));
If m>0 then
begin
B:=B*3+m;
repeat
d:=B div 5;
m:=B mod 5;
B:=d;
until (m>0) or ((B=1) and (m=0));
end;
end;
If m=0 then
begin
Write(A:8);
i:=i+1;
end;
Until i=N;
ReadLn;
END.
2. Отселектировать числа, которые делятся ОДНОВРЕМЕННО на 2, 3 и 5 и тоже не содержат никаких других простых множителей. Этому условию отвечают 30, 60, 90, 240 и т.д. Тогда так:
Код:
VAR
N,i,m:Byte;
A,B,d:LongInt;
b2,b3,b5:Boolean;
BEGIN
Write('N (<256) = ');
ReadLn(N);
A:=0;
i:=0;
Repeat
A:=A+1;
B:=A;
b2:=false;
b3:=false;
b5:=false;
repeat
d:=B div 2;
m:=B mod 2;
if m=0 then b2:=true;
B:=d;
until (m>0) or ((B=1) and (m=0));
If m>0 then
begin
B:=B*2+m;
repeat
d:=B div 3;
m:=B mod 3;
if m=0 then b3:=true;
B:=d;
until (m>0) or ((B=1) and (m=0));
If m>0 then
begin
B:=B*3+m;
repeat
d:=B div 5;
m:=B mod 5;
if m=0 then b5:=true;
B:=d;
until (m>0) or ((B=1) and (m=0));
end;
end;
If (m=0) and b2 and b3 and b5 then
begin
Write(A:8);
i:=i+1;
end;
Until i=N;
ReadLn;
END.
Вот и поди знай, что имел в виду автор задачи!