Найти член прогрессии - 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;
Объяснение кода листинга программы
В данном коде реализована процедура нахождения факторизации числа.
- Объявлены переменные: — A — входное число; — DivizorsCount — счётчик количества найденных делителей; — Divizors — список для хранения найденных делителей; — X, Step — переменные для хранения текущего и следующего тестового числа; — r, q — переменные для хранения частного и остатка от деления A на X; — TType — тип данных, который предполагается использовать для хранения чисел.
- Инициализированы переменные: — X, Step — инициализируются начальными значениями; — DivizorsCount — инициализируется начальным значением; — Divizors — инициализируется массивом; — A — предполагается, что инициализируется до вызова процедуры.
- Запускается цикл, который выполняется до тех пор, пока 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).
- После цикла выводится информация о найденных делителях.
- Если делитель не найден, то процедура заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д