Найти все элементы начального отрезка из n членов последовательности Фибоначчи, являющиеся квадратами - Free Pascal
Формулировка задачи:
Для заданного натурального n(n>=3) найти все элементы начального отрезка из n членов последовательности Фибоначчи, являющиеся квадратами натуральных чисел.
Решение задачи: «Найти все элементы начального отрезка из n членов последовательности Фибоначчи, являющиеся квадратами»
textual
Листинг программы
- {$mode objfpc}
- uses gmp;
- var sf, sq: mpz_t; // uint64;
- f: array [0..2] of mpz_t; // uint64;
- i, n: longint;
- begin
- mpz_init_set_si(f[0], 1);
- mpz_init_set_si(f[1], 1);
- // f[0] := 1; f[1] := 1;
- write('n = '); readln(n);
- for i := 2 to n - 1 do
- begin
- mpz_add(f[i mod 3], f[(i - 2) mod 3], f[(i - 1) mod 3]);
- // f[i mod 3] := f[(i - 2) mod 3] + f[(i - 1) mod 3];
- mpz_sqrt(sf, f[i mod 3]);
- // sf := round(sqrt(f[i mod 3]));
- mp_printf('F(%d) = %Zd', [i + 1, @f[i mod 3]]);
- // write('F(', i + 1, ') = ', f[i mod 3]);
- mpz_mul(sq, sf, sf);
- if mpz_cmp(sq, f[i mod 3]) = 0
- // if sf * sf = f[i mod 3]
- then mp_printf(' = %Zd^2', [@sf]); // writeln(' = ', sf, '^2')
- // else
- writeln
- end;
- readln
- end.
Объяснение кода листинга программы
- Объявлены переменные: — sf, sq: mpz_t; // uint64; — f: array [0..2] of mpz_t; // uint64; — i, n: longint;
- Инициализированы первые два элемента последовательности Фибоначчи: — mpz_init_set_si(f[0], 1); — mpz_init_set_si(f[1], 1);
- Запрошен у пользователя ввод числа n: — write('n = '); readln(n);
- В цикле вычисляются квадраты элементов последовательности Фибоначчи: — for i := 2 to n — 1 do — begin — mpz_add(f[i mod 3], f[(i — 2) mod 3], f[(i — 1) mod 3]); — mpz_sqrt(sf, f[i mod 3]); — mp_printf('F(%d) = %Zd', [i + 1, @f[i mod 3]]); — mpz_mul(sq, sf, sf); — if mpz_cmp(sq, f[i mod 3]) = 0 — then mp_printf(' = %Zd^2', [@sf]); — else mp_printf(' = %Zd^2', [@f[i mod 3]]); — end;
- Программа ожидает ввода данных и выводит результат: — readln
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д