Показать сообщение отдельно
Старый 19.12.2010, 10:46   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Света=) Посмотреть сообщение
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.
Вот и поди знай, что имел в виду автор задачи!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070