Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2010, 20:10   #1
Relrin
Пользователь
 
Регистрация: 28.12.2007
Сообщений: 18
По умолчанию Числа Смита

Вообщем столкнулся с задачей. Довольно непростая, поэтому прошу помощи
Условие задачи: Составное число называется числом Смита, если сумма его цифр равна сумме цифр всех чисел, образующихся разложением исходного числа на простые множители. Число Смита называется супер-числом Смита, если сумма его цифр является числом смита. Найти супер-число Смита с номером N, являющееся полным квадратом. (Число называется полным квадратом, если корень квадратный из него является простым числом)

У меня сейчас следующего рода проблема - у меня почему-то идет зацикливание (или подвисание?) уже при первых проверках (скажем доведу диапазон до 10). 4 - одно из Чисел Смита... Но его не отображает, что оно найдено... Помогите доделать задачу...

Код:
Uses 
  Crt;

Var
  A: array [1..1000] of integer;   {Массив, в котором хранятся числа Смита}
  B: array [1..1000] of integer;   {Массив, в котором хранятся супер-числа Смита}
  N         : integer;             {Номер нужного супер-числа Смита}
  del,ch,j,x: integer;             {Кол-во делителей и цифра от числа, делитель}
  SumNumb   : integer;             {Сумма цифр числа}
  SumSubs   : integer;             {Сумма множителей}
  i,l,m,k,y : integer;             {счетчики для циклов}
  Chislo    : integer;             {Переменная для поиска суммы цифр исх. числа}
  ChisloSub : integer;             {Переменная для поиска суммы множ. исх. числа}
 
Begin
  write('Введите номер числа Смита: ');
  readln(N);
  write('Диапазон: '); 
  readln(m);
  {Поиск составных чисел}
  y:=1;
  for i:=2 to m do
  begin
    x:=2;
    SumNumb:=0;
    del:=0;
    Chislo:=i;
    ChisloSub:=i;
    for j:=1 to round(sqrt(i)) do
    begin
      if (i mod j)=0 then del:=del+1;
      {Найденное число - это число Смита?}
      {Проверяем, чтобы сумма его цифр была равна сумме простых множителей}
      if del<>0 then
      begin
        {Поиск суммы цифр числа}
        while Chislo<>0 do
        begin
          ch:=Chislo mod 10;
          SumNumb:=SumNumb+ch;
          Chislo:=Chislo div 10;
        end;
        {Поиск множителей, а после их суммирование}
         while ChisloSub>0 do
         begin
           while x<=round(sqrt(ChisloSub)) do
           begin
             if ChisloSub mod x=0 then
             begin
               ChisloSub:=ChisloSub div x;
               SumSubs:=SumSubs+x;
             end;
           end;
           inc(x);
         end;
        {Сравнение сумм цифр и множителей}
        if SumNumb=SumSubs then 
        begin
          A[y]:=i;
          write(A[y],' ');
          inc(y);
        end;
      end;
    end; 
  end;
  {Вывод супер-числа Смита}
  writeln(B[N]);
End.
Relrin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить:у=а*(в*в*в)*с,где а,в,с-двоичные числа.Для хранения числа использ.массив! Таняпервокурсница Помощь студентам 4 04.06.2010 12:08
Как числа в двоичном виде вывести в столбик по 4 числа? Equalizer Общие вопросы C/C++ 11 27.09.2009 14:15
Даны натуральные числа m,n. Посчитать сумму m последнего числа n. лялька Паскаль, Turbo Pascal, PascalABC.NET 6 25.12.2008 15:22
число Смита! Snake08 Паскаль, Turbo Pascal, PascalABC.NET 2 08.12.2008 20:22
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49