[comp.lang.c] fibonacci Numbers

amigo@milton.u.washington.edu (The Friend) (04/12/91)

     Can someone send me source code for a routine to calculate 
Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
be great if this found the PRIME numbers in the set. It could print its
results as it went through (if that makes it any easier).


                                                       Thanks..
-- 
--------------------------------------///------------------------------------ 
     Scott Rowin                     ///  amigo@milton.u.washington.edu
     ***********                    /// 
- SPACE OPEN FOR LEASE -       \-\_///    Amigas really do it better...

dave@cs.arizona.edu (Dave Schaumann) (04/13/91)

In article <1991Apr12.051844.15063@milton.u.washington.edu> amigo@milton.u.washington.edu (The Friend) writes:
>     Can someone send me source code for a routine to calculate 
>Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
>be great if this found the PRIME numbers in the set. It could print its
>results as it went through (if that makes it any easier).

This sounds a lot like a freshman-level programming assignment to me...

Consider:
	o The definition of the Fibonacci sequence is usually no more than
	  one step of translation away from a working algorithm.
	o Finding prime numbers may be a little harder, but not much.

-- 
Dave Schaumann      | We're so sorry, Uncle Albert.  But the kettle's
dave@cs.arizona.edu | on the boil, and we're so *easly* called away...

jrbd@craycos.com (James Davies) (04/13/91)

In article <1991Apr12.051844.15063@milton.u.washington.edu> amigo@milton.u.washington.edu (The Friend) writes:
>
>     Can someone send me source code for a routine to calculate 
>Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
>be great if this found the PRIME numbers in the set. It could print its
>results as it went through (if that makes it any easier).

Well, this program only prints the final answer, and doesn't find the
primes, but you should be able to modify it to do those things.  
Usage: "a.out N" prints the Nth fibonacci number.
Good luck!
					-- jd

p.s.  What can I say, it's Friday (although not April 1 any more)...
------------ %< cut here ----------------
#define A atoi
#define E exit
#define I int
#define O main
#define U printf
#define Y char **
#define W return
I O(c,v)I c;Y v;{W(v&&((c<2)?(U("?\n"),E(1)):1))?(U("%d\n",O(A(*++v)+1,(Y)0)-2),
0):((c>3)?O(c-1,(Y)0)+O(c-2,(Y)0)-2:3);}

hurwitz@enuxha.eas.asu.edu (Roger A. Hurwitz) (04/13/91)

In article <1991Apr12.051844.15063@milton.u.washington.edu>, amigo@milton.u.washington.edu (The Friend) writes:
> 
>      Can someone send me source code for a routine to calculate 
> Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
> be great if this found the PRIME numbers in the set. It could print its
> results as it went through (if that makes it any easier).

I picked up the following nifty formula from somewhere for calculating
any Fibonacci number in the sequence:

#include <math.h>
#define SQRT5 2.2360679775

main()
{
    double x, fib;
        .
	.
    fib = (pow((1.0 + SQRT5) / 2.0, x) - pow((1.0 - SQRT5) / 2.0, x)) / SQRT5;
}

I'm afraid I can't help you on the prime number question.  =^) 

jroth@allvax.enet.dec.com (Jim Roth) (04/14/91)

In article <1991Apr12.051844.15063@milton.u.washington.edu>, amigo@milton.u.washington.edu (The Friend) writes...
> 
>     Can someone send me source code for a routine to calculate 
>Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
>be great if this found the PRIME numbers in the set. It could print its
>results as it went through (if that makes it any easier).

Hmm... sounds like a tough homework assignment :-)

Anyhow, here's a FORTRAN program that computes a few Fibonacci numbers
using a Cauchy's residue theorem and the fast Fourier transform; you can
always translate it to c...

- Jim

	PROGRAM FIBONACCI
C
C Compute some Fibonacci numbers
C
	IMPLICIT NONE

	INTEGER*4 LOGN, NPTS, NFIB, IPASS, I, J, K, L
	COMPLEX*16 T, U, V, W, Z, Z0, A(64)
	REAL*8 PI, X, R

	DATA PI/3.14159265358979323846264338D0/
C
C Generating function for Fibonacci numbers
C
	COMPLEX*16 F
	F(Z) = 1.0/(1.0-Z-Z**2)

	LOGN = 6
	NPTS = 2**LOGN
	NFIB = 2**(LOGN-1)

	Z0 = 0.0
	R = 0.4
C
C Approximate contour integrals with trapezoidal rule using FFT
C
	W = DCMPLX(DCOS(2.0*PI/NPTS), DSIN(2.0*PI/NPTS))
	V = R
	A(1) = F(Z0+V)
	A(2) = F(Z0-V)
	J = 0
	DO I = 1,NPTS/2-1
	  V = V*W
	  K = NPTS
100	  CONTINUE
	  K = K/2
	  J = J.XOR.K
	  IF ((J.AND.K).EQ.0) GOTO 100
	  A(J+1) = F(Z0+V)
	  A(J+2) = F(Z0-V)
	ENDDO

	L = 1
	DO IPASS = 1,LOGN
	  U = 1.0
	  W = DCMPLX(DCOS(PI/L), -DSIN(PI/L))
	  DO J = 1,L
	    DO I = J,NPTS,2*L
	      K = I+L
	      T = A(K)*U
	      A(K) = A(I)-T
	      A(I) = A(I)+T
	    ENDDO
	    U = U*W
	  ENDDO
	  L = L+L
	ENDDO
C
C Denormalize series coefficients
C
	X = 1.0D0/NPTS
	DO I = 1,NPTS
	  A(I) = A(I)*X
	  X = X/R
	ENDDO
C
C Show the answer
C
	TYPE 101, (I, DREAL(A(I)), I=1,NFIB)
101	FORMAT (1X, I10, F28.1)

	STOP

	END

kahhan@bnr.ca (04/15/91)

In article <1991Apr12.051844.15063@milton.u.washington.edu> amigo@milton.u.washington.edu (The Friend) writes:
>
>     Can someone send me source code for a routine to calculate 
>Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
>be great if this found the PRIME numbers in the set. It could print its
>results as it went through (if that makes it any easier).
>

Why not just use the equation and calculate the nth number directly? Then
you could just embed the equation in a loop (for i=1 to n) and you'll
have what you want.

-- 
--------------------------------------------------------------------------------
Larry Kahhan - NRA, NRA-ILA, CSG, GOA, GSSA |   The opinions expressed here do
               lkahhan@bnr.ca               |   not necessarily represent the
                                            |   views of the management.
--------------------------------------------------------------------------------

libes@cme.nist.gov (Don Libes) (04/18/91)

>>     Can someone send me source code for a routine to calculate 
>>Fibonacci numbers to _x_ (x being input from user)? Additionally it'd
>>be great if this found the PRIME numbers in the set. It could print its

>Well, this program only prints the final answer, and doesn't find the
>primes, but you should be able to modify it to do those things.  

>I O(c,v)I c;Yv;{W(v&&((c<2)?(U("?\n"),E(1)):1))?(U("%d\n",O(A(*++v)+1,(Y)0)
>-2),0):((c>3)?O(c-1,(Y)0)+O(c-2,(Y)0)-2:3);}

Nice, but why not go all the way and use the Best-Of-Show winner in
last year's obfuscated C contest.  Given the proper argument it would
reverse itself thereby becoming a sort program.  Upon sorting the
original program (which did differential equations as well) it would
produce Fibonacci numbers.

Don Libes          libes@cme.nist.gov      ...!uunet!cme-durer!libes