Найти член прогрессии - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Первый член арифметической прогрессии равен А, шаг равен тоже А. Интересует порядковый номер первого числа в данной последовательности, которое является кубом некоторого натурального числа. Составил код. Как можно упростить программу, чтобы быстрее работала. А (целое число) (1 ≤ А ≤ 10^9)
Листинг программы
  1. var
  2. x3: real;
  3. n,a,a1: longint;
  4. f1,f2:text;
  5. begin
  6. assign(f1, 'interesting.in');
  7. assign(f2, 'interesting.out');
  8. reset(f1);
  9. rewrite(f2);
  10. read(f1,a1);
  11. a:=a1;
  12. n:=1;
  13. x3:=exp(ln(a)/3);
  14. while frac(x3)>0 do
  15. begin
  16. a:=a1+a;
  17. x3:=exp(ln(a)/3);
  18. n:=n+1;
  19. end;
  20. writeln(f2,n);
  21. close(f1);
  22. close(f2);
  23. end.

Решение задачи: «Найти член прогрессии»

textual
Листинг программы
  1.   procedure Factorization(A: TType; var DivizorsCount: integer; var Divizors: TList);
  2.   var
  3.     X, Step: TType;
  4.     r, q: TType;
  5.   begin
  6.     X := 2;
  7.     Step := 2;
  8.     DivizorsCount := 0;
  9.     while A <> 1 do
  10.     begin
  11.       r := A mod X;
  12.       q := A div X;
  13.       if r = 0 then
  14.       begin
  15.         Inc(DivizorsCount);
  16.         Divizors[DivizorsCount].Divizor := X;
  17.         Divizors[DivizorsCount].Count := 0;
  18.         while A mod X = 0 do
  19.         begin
  20.           Inc(Divizors[DivizorsCount].Count);
  21.           A := A div X;
  22.         end;
  23.         writeln(DivizorsCount: 3, Divizors[DivizorsCount].Divizor: 10,
  24.           Divizors[DivizorsCount].Count: 10);
  25.       end
  26.       else
  27.       begin
  28.         if q <= X then
  29.         begin
  30.           Inc(DivizorsCount);
  31.           Divizors[DivizorsCount].Divizor := A;
  32.           Divizors[DivizorsCount].Count := 1;
  33.           A := 1;
  34.         end;
  35.       end;
  36.       case X of
  37.         2: X := 3;
  38.         3: X := 5;
  39.         else
  40.         begin
  41.           X := X + Step;
  42.           Step := Step xor $6;
  43.         end
  44.       end;
  45.     end;
  46.   end;

Объяснение кода листинга программы

В данном коде реализована процедура нахождения факторизации числа.

  1. Объявлены переменные: — A — входное число; — DivizorsCount — счётчик количества найденных делителей; — Divizors — список для хранения найденных делителей; — X, Step — переменные для хранения текущего и следующего тестового числа; — r, q — переменные для хранения частного и остатка от деления A на X; — TType — тип данных, который предполагается использовать для хранения чисел.
  2. Инициализированы переменные: — X, Step — инициализируются начальными значениями; — DivizorsCount — инициализируется начальным значением; — Divizors — инициализируется массивом; — A — предполагается, что инициализируется до вызова процедуры.
  3. Запускается цикл, который выполняется до тех пор, пока A не станет равным 1. В каждой итерации: — Вычисляются r и q. — Если r равно 0, то это значит, что X является делителем A, поэтому: — Увеличивается счётчик делителей; — X записывается в массив делителей; — Делитель X присваивается переменной A; — Увеличивается счётчик для делителя X; — Цикл выполняется до тех пор, пока A не станет равным X. — Выводится информация о найденном делителе. — Если r не равно 0, то: — Если q меньше или равно X, то: — Увеличивается счётчик делителей; — X записывается в массив делителей; — A присваивается единице, чтобы не искать его делители повторно; — Цикл прерывается. — Иначе: — X увеличивается на Step; — Step меняется на обратное значение Step (XOR $6).
  4. После цикла выводится информация о найденных делителях.
  5. Если делитель не найден, то процедура заканчивается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы