# Thread: Fibonacci Numbers (plain DB2)

1. Registered User
Join Date
Jul 2009
Location
NY
Posts
963

## Unanswered: Fibonacci Numbers (plain DB2)

In mathematics, the Fibonacci numbers are the following sequence of numbers: 1, 1, 2, 3, 5, 8, 13, 21, etc

By definition, the first two Fibonacci numbers are 0 and 1, and each remaining number is the sum of the previous two. Some sources omit the initial 0, instead beginning the sequence with two 1s.

In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation:

F(n) = F(n - 1) + F(n - 2) where F(n) is Fibonacci function.

with seed values: F(0) = 0 and F(1) = 1.

Why this is interesting for DB2 user ?

Because we have to remembering the 2 previous numbers to find the current number.

Of cause we can join the same table 3 times and solve this problem, but I want to give you the simplier solution:

with contol_tbl (max_no) as
(select int(46) from sysibm.sysdummy1)
,
Fibonacci_number (seq, Fbc, Fbck_1, Fbck_2, max_no) as
(
select int(1), int(0), int(1), int(0), max_no from contol_tbl
union all
select seq + 1, Fbck_1 + Fbck_2, Fbck_1 + Fbck_2, Fbck_1, max_no
from Fibonacci_number
where seq + 1 <= max_no
)
select
seq "Sequence Number", Fbc "Fibonacci Number"
from Fibonacci_number
Lenny.

2. Registered User
Join Date
Jul 2009
Location
NY
Posts
963
You can see:
Only 46 Fibonacci's numbers we can get if we'll use the integer representation of the column in the Fibonacci_number table.

Try to change the integer column to float, or double.
Instead of the 46 numbers we can generate 364 numbers.

Also not too much !

with contol_tbl (max_no) as
(select int(364) from sysibm.sysdummy1)
,
Fibonacci_number (seq, Fbc, Fbck_1, Fbck_2, max_no) as
(
select int(1), double(0), double(1), double(0), max_no from contol_tbl
union all
select seq + 1, Fbck_1 + Fbck_2, Fbck_1 + Fbck_2, Fbck_1, max_no
from Fibonacci_number
where seq + 1 <= max_no
)
select
seq "Sequence Number",
case
when seq <= 46
then case when strip(digits(int(Fbc)), L, '0') = ' '
then '0'
else strip(digits(int(Fbc)), L, '0') end
else lcase(varchar(Fbc))
end "Fibonacci Number"
from Fibonacci_number
Lenny

3. Registered User
Join Date
Jul 2009
Location
NY
Posts
963
The bee ancestry code.

Fibonacci numbers also appear in the description of the reproduction of a population of idealized bees, according to the following rules:

If an egg is laid by an unmated female, it hatches a male.
If, however, an egg was fertilized by a male, it hatches a female.
Thus, a male bee will always have one parent, and a female bee will have two.

If one traces the ancestry of any male bee (1 bee), he has 1 female parent (1 bee). This female had 2 parents, a male and a female (2 bees). The female had two parents, a male and a female, and the male had one female (3 bees). Those two females each had two parents, and the male had one (5 bees). This sequence of numbers of parents is the Fibonacci sequence.

This is an idealization that does not describe actual bee ancestries. In reality, some ancestors of a particular bee will always be sisters or brothers, thus breaking the lineage of distinct parents.
Last edited by Lenny77; 08-21-09 at 13:38.

4. Registered User
Join Date
Jul 2009
Location
NY
Posts
963
A Fibonacci prime is a Fibonacci number that is prime .
The first few are:
2, 3, 5, 13, 89, 233, 1597, 28657, 514229, ...

Fibonacci primes with thousands of digits have been found, but it is not known whether there are infinitely many. They must all have a prime index, except F4 = 3. There are arbitrarily long runs of composite numbers and therefore also of composite Fibonacci numbers.

With the exceptions of 1, 8 and 144 (F1 = F2, F6 and F12) every Fibonacci number has a prime factor that is not a factor of any smaller Fibonacci number (Carmichael's theorem).

144 is the only nontrivial square Fibonacci number.
Attila Petho proved in 2001 that there are only finitely many perfect power Fibonacci numbers. In 2006, Y. Bugeaud, M. Mignotte, and S. Siksek proved that only 8 and 144 are perfect powers.
Last edited by Lenny77; 08-21-09 at 13:38.

5. SQL Consultant
Join Date
Apr 2002
Location
Posts
20,002
todd, you need to post this stuff on a maths forum, where there might actually be someone who cares...

6. Registered User
Join Date
Jul 2009
Location
NY
Posts
963
Did you an SQL in the first two messages ?

Everybody can use them. But not everybody knows what does it mean.

Lenny

7. Registered User
Join Date
Apr 2009
Posts
42
Wow! Thanks! Sure it will help in the future.
But I cannot fully understand the sytax of the sql.
Can you kindly share some doc of usage the 'with...as' ?
THX!

8. Registered User
Join Date
Jul 2009
Location
NY
Posts
963
Originally Posted by wilsonfv
Wow! Thanks! Sure it will help in the future.
But I cannot fully understand the sytax of the sql.
Can you kindly share some doc of usage the 'with...as' ?
THX!
This is just a recursive SQL statement. Nothing else.

Lenny

9. Registered User
Join Date
Jul 2009
Location
NY
Posts
963

## The simplified query

As usually, we can simplify expression without losing speed of reception of result:

Code:
```with contol_tbl (max_no) as
(select 46 from sysibm.sysdummy1)
,
Fibonacci_number (seq, Fib, Fib1, max_no) as
(
select 1, double(0), double(1), max_no
from contol_tbl
union all
select seq + 1, Fib + Fib1, Fib, max_no
from Fibonacci_number
where seq + 1 <= max_no
)
select
seq "Sequence Number",
case
when seq <= 46
then
case when strip(digits(int(Fib)), L, '0') = ' ' then '0'
else strip(digits(int(Fib)), L, '0')
end
else lcase(varchar(Fib))
end "Fibonacci Number"
from Fibonacci_number```
Fibonacci Number
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
Lenny

10. Registered User
Join Date
Jul 2009
Location
NY
Posts
963

## Fyi

That is interesting: using this formula it is not possible to find more than 365 Fibonaccy numbers.

Last Fibonaccy number, find by this formula, to which we can be trusted is 806515533049393 (seq = 74) after it numbers are approximated

Lenny

11. Registered User
Join Date
Nov 2009
Posts
5
it's really interesting, thanks a lot!.
I have found another topic about the implementation this procedure at the forum.
Last edited by ElenaVas; 11-19-09 at 22:14.

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•