Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
671 / 175 / 52
Регистрация: 22.12.2013
Сообщений: 1,388
Записей в блоге: 18
1

По числу Фибоначи найти его номер в последовательности Фибоначи в BigInteger

07.05.2017, 10:54. Показов 1977. Ответов 7

По числу Фибоначи найти его номер в последовательности Фибоначи в BigInteger.
Написал для int, но мне нужно в BigInteger.
Помогите пожалуйста переделать:

Java
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
/*
 По числу Фибоначи найти его номер в последовательности Фибоначи
 */
 
/**
 *
 * @author vvm28
 */
public class FibonacciSequenceInt {
    public static void main(String[] args) {
       int ar[] = {610, 34, 0, 1346269, 10946 };
       for(int i=0; i<ar.length; i++){
           System.out.print(_numFib(ar[i])+" ");
       }
    }
    private static int _numFib(int fib){
    int  num, i = 1, fn1 = 0, fn2 = 1, cur = 1;
    while (cur < fib)
    {
      cur = fn1 + fn2;
      fn1 = fn2;
      fn2 = cur;
      i++;
    }
    if (cur == fib)
        num = i;
         else
            num = 0; // нулевое чиcло Фибоначи или не число Фибоначи
    return num;
    }
  
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2017, 10:54
Ответы с готовыми решениями:

Найти номер заданного числа Фибоначи
Дано положительное число А. Найти номер к такого числа Фибоначи Xk, что Xk-1≤A&lt;Xk Числа...

Вычисляем последовательности Фибоначи
Где Ошибка //Автор: VibeProgramm // Задание взято из книги &quot;Страуструп принципы и практика...

Найти все нечетные числа последовательности Фибоначи, не превышающие заданного числа
Помогите пожалуйста! Языки Си. Найти все нечетные числа последовательности Фибоначи, не...

Найти n-oe число Фибоначи
Составить программу с использованием рекурсивной функции. Найти n-oe число Фибоначи.Числа фибоначи...

7
4 / 4 / 3
Регистрация: 17.11.2015
Сообщений: 57
07.05.2017, 18:05 2
Лучший ответ Сообщение было отмечено vvm28 как решение

Решение

Java
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
package org.lignium.experiment;
 
import java.math.BigInteger;
 
public final class Experiment {
    public static final void main(String[] arguments) {
        BigInteger[] array = {
                BigInteger.valueOf(610),
                BigInteger.valueOf(34),
                BigInteger.valueOf(0),
                BigInteger.valueOf(1346269),
                BigInteger.valueOf(10946)
                };
        
        for (int index = 0; index < array.length; index++) {
            System.out.println(index + " -> " + numFib(array[index]));
        }
    }
    
    private static BigInteger numFib(BigInteger fib) {
        BigInteger number;
        BigInteger i = BigInteger.ONE;
        BigInteger fn1 = BigInteger.ZERO;
        BigInteger fn2 = BigInteger.ONE;
        BigInteger current = BigInteger.ONE;
        
        while (current.compareTo(fib) < 0) {
            current = fn1.add(fn2);
            fn1 = fn2;
            fn2 = current;
            i = i.add(BigInteger.ONE);
        }
        
        if (current.equals(fib)) {
            number = i;
        } else {
            number = BigInteger.ZERO;
        }
        
        
        return number;
    }
}
1
671 / 175 / 52
Регистрация: 22.12.2013
Сообщений: 1,388
Записей в блоге: 18
09.05.2017, 15:39  [ТС] 3
Спасибо все работает, но:
Java
1
2
BigInteger.valueOf(40278817102283407038585813270091176624224846310456696876645445975772848265708967220435913205),
 // ошибка - целое слишком длинное
Можно ли ввести этот массив BigInteger[] array с клавиатуры?
Так что-бы закописасить простыню BigInteger-ов в консоль и они бы ввелись.
Пробовал сканером, но что-то не получается.
0
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
09.05.2017, 16:01 4
Лучший ответ Сообщение было отмечено vvm28 как решение

Решение

Java
1
new BigInteger("40278817102283407038585813270091176624224846310456696876645445975772848265708967220435913205")
1
671 / 175 / 52
Регистрация: 22.12.2013
Сообщений: 1,388
Записей в блоге: 18
09.05.2017, 17:13  [ТС] 5
Паблито, спасибо. Все получилось.
Правда пришлось вручную вводить:
Java
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
  BigInteger[] array = {
                
        new BigInteger("284812298108489611757988937681460995615380088782304890986477195645969271404032323901"), //1
        new BigInteger("75025"), //2
        new BigInteger("2659645867499517218328078871148874401790243225231656252449508985257357607778081333609713171997614604683342277221182387201741083382726626435517760261510979306631002155705512171340865"), //3
        new BigInteger("160500643816367088"),//4
        new BigInteger("115650178472812307066947725922884512209954014405689209223271951024467876149421547437270035760627074346990718032425624160540610132683735567778267782651148854729"),//5
        new BigInteger("9356167927584356870497608935205215407421313285040837712795857869873919680576803330075673420058256777291515175125872666989233785694260034313506"),//6
        new BigInteger("34468260105109870017385177312438050697027533834851412505302058429736597230270443860863973247044430446588302156705501747391672816199086845"),//7
        new BigInteger("14455678767661239941060750283349851372786616456634781515481577509301997444983826731071749118079998628070030493"),//8
        new BigInteger("65097492361581603237233203672874663179834855497446498041443381583014715955555123863972831437426753700416795598516352331061931907120100794141297405153595216044749666809015355488194403823"),//9
        new BigInteger("15156039800290547036315704478931467953361427680642"),//10
        new BigInteger("453451245710105664639547812980537405595703162301723672881541665201938976661355778222083513397766239269055001978186519308745237998354703"),//11
        new BigInteger("6648932669220874753121434349783799309012771842025717308770803694743584186951058443607791370873169134344289860258664889853333512214128134093831575609"),//12
        new BigInteger("25299086886458645685589389182743678652930"),//13
        new BigInteger("1749440242112949890359643764500340810255801624771849283111666609969749752892204066023263004120717669263055598981159607796789557109271146692992984296260068611024439"),//14
        new BigInteger("28624020537229717283244863695841661789309459371299941322398704536965075971940465647510004531000816"),//15
        new BigInteger("1452815235413449534189983410888285644475648721895169018403435938673646672720247029959992118874049947882115958890567099150434"),//16
        new BigInteger("56613850282803917571020710912352273128359037207464294769554425049946119446134200380023253900925711945706952706742082593051847002924694714289862350724451025928248176225776822981837"),//17
        new BigInteger("1544447803282326157141063860798140565135175279561812695372311151183404978544074576084779694906092198758336762454048905401589449506607204278264939097537573413980490519471907060934663660744135522705225"),//18
       // new BigInteger("28624020537229717283244863695841661789309459371299941322398704536965075971940465647510004531000816"),//19
      //  new BigInteger("1452815235413449534189983410888285644475648721895169018403435938673646672720247029959992118874049947882115958890567099150434"),//20
       // new BigInteger(""),//21
        //new BigInteger(""),//22
       // new BigInteger(""),//23
       // new BigInteger(""),//24
       // new BigInteger(""),//25
                };
Уже нашел как нужно было вводить. Всем спасибо.
0
2097 / 1653 / 410
Регистрация: 17.02.2014
Сообщений: 8,160
11.05.2017, 16:47 6
А можно и вот так
Java
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
       String fiboNumber = "818706854228831001753880637535093596811413714795418360007";
       System.out.println(fiboNumber);
       System.out.println("является " + getNumOfFiboSeq(new BigInteger(fiboNumber)) + " числом последовательности Фибоначчи");
    }
    
    private static int getNumOfFiboSeq(BigInteger fiboNum) {
        double tmp = Math.log(fiboNum.doubleValue() * Math.sqrt(5.0)) / Math.log((1 + Math.sqrt(5.0)) / 2);
        return (int)Math.round(tmp);
    }
Bash
1
2
818706854228831001753880637535093596811413714795418360007
является 274 числом последовательности Фибоначчи
у меня работает до 1474-го числа
1
671 / 175 / 52
Регистрация: 22.12.2013
Сообщений: 1,388
Записей в блоге: 18
12.05.2017, 12:43  [ТС] 7
Aviz__, Спасибо. Очень хорошо.
Не могли бы вы показать, как вы пришли к этой формуле:
Java
1
 double tmp = Math.log(fiboNum.doubleValue() * Math.sqrt(5.0)) / Math.log((1 + Math.sqrt(5.0)) / 2);

Кстати, видел еще:
Java
1
2
3
public static int fibIndex(long n) {
        return (int) Math.round(Math.log(n * Math.sqrt(5))/Math.log(1.618));
    }
Но как это вывели не совсем понятно.
0
2097 / 1653 / 410
Регистрация: 17.02.2014
Сообщений: 8,160
12.05.2017, 14:45 8
Из формулы Бине есть следствие которое прологарифмировал и получил выражение для n.
https://ru.wikipedia.org/wiki/... 1%87%D0%B8
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2017, 14:45

фибоначи
найти первые N чисел Фибоначи двумя способами. С помощью рекурсии и с помощью итерации.

Фибоначи
подскажите пожалуйста, как вывести на экран первые тридцать чисел Фибоначи ны языке C++ ...

Фибоначи
Здраствуйте!Помогите решить задачу. Дан файл f,компоненты U0,U1,..Un которого являеться...

Метод фибоначи
есть прога)) но можно ее както упроcтить и в паскале скинуть))) она в мсеня в С++ Помогите плз...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.