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

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

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

Первый член арифметической прогрессии равен А, шаг равен тоже А. Интересует порядковый номер первого числа в данной последовательности, которое является кубом некоторого натурального числа. Составил код. Как можно упростить программу, чтобы быстрее работала. А (целое число) (1 ≤ А ≤ 10^9)
var
    x3: real;
    n,a,a1: longint;
    f1,f2:text;
begin
assign(f1, 'interesting.in');
assign(f2, 'interesting.out');
reset(f1);
rewrite(f2);
read(f1,a1);
a:=a1;
n:=1;
x3:=exp(ln(a)/3);
while frac(x3)>0 do
        begin
        a:=a1+a;
        x3:=exp(ln(a)/3);
        n:=n+1;
        end;
writeln(f2,n);
close(f1);
close(f2);
end.

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

textual
Листинг программы
  procedure Factorization(A: TType; var DivizorsCount: integer; var Divizors: TList);
  var
    X, Step: TType;
    r, q: TType;
  begin
    X := 2;
    Step := 2;
    DivizorsCount := 0;
    while A <> 1 do
    begin
      r := A mod X;
      q := A div X;
      if r = 0 then
      begin
        Inc(DivizorsCount);
        Divizors[DivizorsCount].Divizor := X;
        Divizors[DivizorsCount].Count := 0;
        while A mod X = 0 do
        begin
          Inc(Divizors[DivizorsCount].Count);
          A := A div X;
        end;
        writeln(DivizorsCount: 3, Divizors[DivizorsCount].Divizor: 10,
          Divizors[DivizorsCount].Count: 10);
      end
      else
      begin
        if q <= X then
        begin
          Inc(DivizorsCount);
          Divizors[DivizorsCount].Divizor := A;
          Divizors[DivizorsCount].Count := 1;
          A := 1;
        end;
      end;
      case X of
        2: X := 3;
        3: X := 5;
        else
        begin
          X := X + Step;
          Step := Step xor $6;
        end
      end;
    end;
  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
Похожие ответы