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

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

29.12.2021, 17:53. Показов 2390. Ответов 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
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
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
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
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
6118 / 2813 / 1038
Регистрация: 01.06.2021
Сообщений: 10,262
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,984
Записей в блоге: 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
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru