Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13

Рассчитать 50-е число Фибоначчи, не считая всех предыдущих

29.12.2021, 17:53. Показов 2498. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Как можно рассчитать 50-е число Фибоначчи, не считая всех предыдущих?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2021, 17:53
Ответы с готовыми решениями:

Заменить каждое число суммой начальных значений всех предыдущих
Вводиться последовательность чисел длинной N.Заменить каждое число суммой начальных значений всех предыдущих.Вывести результат.Пример...

Написать программу, которая находит первое число в массиве, равное сумме всех предыдущих
Написать программу, которая находит первое число в массиве, равное сумме всех предыдущих.

While>Дано цело число N(>1),являющееся числом Фибоначчи:N=Fk Найти целое число K- порядковый номер числа Фибоначчи N.
Дано цело число N(>1),являющееся числом Фибоначчи:N=Fk Найти целое число K- порядковый номер числа Фибоначчи N.

15
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6248 / 2960 / 1048
Регистрация: 01.06.2021
Сообщений: 10,992
29.12.2021, 18:17
SW Developer, через золотое сечение

https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{n}=\frac{{\varphi }^{n}-{(-\varphi )}^{-n}}{2\varphi -1}

https://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi =\frac{1+\sqrt{5}}{2}\approx 1,618
1
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
29.12.2021, 18:23  [ТС]
C++
1
2
3
4
5
6
const double SQRT5 = sqrt(5);
const double PHI = (SQRT5 + 1) / 2;
 
int fibo(int n){
    return int(pow(PHI, n) / SQRT5 + 0.5);
}
Royal_X, а другие способы есть?

Добавлено через 2 минуты
Для целых чисел, т.к. цена вычисления степеней нецелых чисел довольно велика, как и их погрешность.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6248 / 2960 / 1048
Регистрация: 01.06.2021
Сообщений: 10,992
29.12.2021, 18:24
Цитата Сообщение от SW Developer Посмотреть сообщение
а другие способы есть?
я не слышал о других, просто знаю, что для любой линейной рекуррентной последовательности (как вот числа Фибоначчи) существует явная формула с золотым сечением
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
29.12.2021, 18:28
Цитата Сообщение от SW Developer Посмотреть сообщение
а другие способы есть?
Да пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
 
static unsigned long fibonacci[]{
        0,
        1,
        1,
        2,
        3,
        5,
        8,
        13,
        21,
        34,
        55,
        89,
        144,
        233,
        377,
        610,
        987,
        1597,
        2584,
        4181,
        6765,
        10946,
        17711,
        28657,
        46368,
        75025,
        121393,
        196418,
        317811,
        514229,
        832040,
        1346269,
        2178309,
        3524578,
        5702887,
        9227465,
        14930352,
        24157817,
        39088169,
        63245986,
        102334155,
        165580141,
        267914296,
        433494437,
        701408733,
        1134903170,
        1836311903,
        2971215073,
        4807526976,
        7778742049,
        12586269025,
        20365011074,
        32951280099,
        53316291173,
        86267571272,
        139583862445,
        225851433717,
        365435296162,
        591286729879,
        956722026041,
};
 
int main() {
    std::cout << fibonacci[50] << std::endl;
    return 0;
}
2
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
29.12.2021, 18:58  [ТС]
Что-то у меня число в минус ушло.

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const double SQRT5 = sqrt(5);
const double PHI = (SQRT5 + 1) / 2;
 
int f3(int n)
{
    return int(pow(PHI, n) / SQRT5 + 0.5);
}
 
int main()
{
    std::cout << "50th Fibonacci number = " << f3(50) << "\n\n";
 
    system("pause");
    return 0;
}
Ответ = -2147483648.

Почему?

Добавлено через 2 минуты
Обычные алгоритмы дают ответ: -298632863.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6248 / 2960 / 1048
Регистрация: 01.06.2021
Сообщений: 10,992
29.12.2021, 18:59
Цитата Сообщение от SW Developer Посмотреть сообщение
Почему?
https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{50} = 12586269025

переменная типа int такое число не в состоянии хранить
1
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
29.12.2021, 19:00  [ТС]
0
Заблокирован
29.12.2021, 19:14
unsigned long long не устраивает?
1
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
29.12.2021, 19:20  [ТС]
long long хватило.
0
29.12.2021, 20:58

Не по теме:

Цитата Сообщение от SW Developer Посмотреть сообщение
long long хватило.
Похоже, я пересидел на специальных форумах. И когда сейчас участник с подобным ником пишет подобные фразы, я сначала понимаю их весьма специфически...

0
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
01.01.2022, 12:49  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
И когда сейчас участник с подобным ником
ну-ка, давай подробнее, почитаем твои извращенные умозаключения. Я думаю, 1 января это можно, администрация тоже посмеется, а потом заблокирует. )
0
01.01.2022, 13:01

Не по теме:

Цитата Сообщение от SW Developer Посмотреть сообщение
ну-ка, давай подробнее
Щас, Пал Семеныч, уже бегу, готовить вам мои умозаключения в развернутом виде...

0
 Аватар для SW Developer
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
01.01.2022, 13:05  [ТС]
С Новым годом!
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
01.01.2022, 13:29
Аминь!

Ну и по сабжу
C++
1
2
3
4
5
6
7
typedef unsigned long long ull;
 
ull fib(ull a, ull b, ull p, ull q, int n) {
    return n==0 ? b :
           n%2==0 ? fib(a, b, p*p+q*q, q*q+2*p*q, n/2) :
           fib(b*q+a*q+a*p, b*p+a*q, p, q, n-1);
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
01.01.2022, 17:39
Цитата Сообщение от Royal_X Посмотреть сообщение
существует явная формула с золотым сечением
- хорошая осведомленность. На самом деле существует метод Эйлера для решения линейных рекуррентных соотношений. Грубо говоря, он выглядит так:

Для рекуррентного соотношения вида:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{n}={a}_{1}{F}_{n-1}+{a}_{2}{F}_{n-2}+...+{a}_{k}{F}_{n-k}

строим характеристический полином:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{k}={a}_{1}{x}^{n-1}+{a}_{2}{x}^{n-2}+...+{a}_{k}

Решение рекуррентного соотношения выражается через его корни и произвольные константы, которые определяются из начальных условий.

В частности, для последовательности Фибоначчи базовое рекуррентное соотношение имеет вид:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{n}={F}_{n-1}+{F}_{n-2}

k=2. Характеристический полином имеет вид:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{2}=x+1

Два его корня равны:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{1}=(1+\sqrt{5})/2; {x}_{2}=(1-\sqrt{5})/2;

Общее решение имеет вид:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{C}_{1}{((1+\sqrt{5})/2)}^{n}+{C}_{2}{((1-\sqrt{5})/2)}^{n}

Константы определяются из начальных условий:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{F}_{0}=1;{F}_{1}=1

Получается формула Бине для явного выражения числа Фибоначчи через n. Но воспользоваться ей "в лоб" не так просто. Мешает иррациональность, которая вносит погрешность.

Однако есть еще один прямой метод - матричный:

https://www.cyberforum.ru/cgi-bin/latex.cgi?{\begin{pmatrix}1 & 1\\ 1 & 0 \end{pmatrix}}^{n} = \begin{pmatrix}{F}_{n+1} & {F}_{n} \\ {F}_{n} & {F}_{n-1} \end{pmatrix}

Добавлено через 9 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
 
using namespace std;
 
long int fib(int n)
{
    long int a11=1L;
    long int a12=1L;
    long int a21=1L;
    long int a22=0L;
    
    long int c11=1L;
    long int c12=1L;
    long int c21=1L;
    long int c22=0L;
 
    long int t11=0L;
    long int t12=0L;
    long int t21=0L;
    long int t22=0L;
 
    
    for (int i=1; i<=n; i++)
    {
        t11=a11*c11+a12*c21;
        t12=a11*c12+a12*c22;
        t21=a21*c11+a22*c21;
        t22=a21*c12+a22*c22;
        
        c11=t11;
        c12=t12;
        c21=t21;
        c22=t22;
 
    }
    
    return c12;
    
}
 
int main()
{
    int n;
    
    cin >> n;
    
    cout << fib(n-1);
 
    return 0;
}
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.01.2022, 17:39
Помогаю со студенческими работами здесь

Дано целое число N(>1), являющееся числом Фибоначчи: N=F(k). Нфйти число K - порядковый номер числа Фибоначчи.
Дано целое число N(&gt;1), являющееся числом Фибоначчи: N=F(k). Нфйти число K - порядковый номер числа Фибоначчи. Последовательность чисел...

Дано целое число n(>1), являющееся числом Фибоначчи. Найти предыдущее и следующее число Фибоначчи
дано целое число n(&gt;1), являющееся числом Фибоначи:n=fk . Найти целые числа fk-1 и fk+1 -предыдущее и последующее число Фибоначчи.

Вычислить сумму всех чисел Фибоначчи, которые не превосходят число n
Числа Фибоначчи определяются формулами: f0=f1=1; fn=fn-1+fn-2 при n=2, 3,… Например, 1, 1, 2, 3, 5, 8,….. Вычислить сумму всех чисел...

Рекурсия, складывание 3 предыдущих чисел ( нечто похожее на Фибоначчи)
Доброго времени суток. Использую рекурсию чтобы решить следующую задачу: foo(0)=2 foo(1)=3 foo(2)=5 foo(n)= foo(n−1)+...

Ввести натуральное число N и вычислить сумму всех чисел Фибоначчи, меньших N
Ввести натуральное число N и вычислить сумму всех чисел Фибоначчи, меньших N. Предусмотрите защиту от ввода отрицательного числа N. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru