Home > 1,000,000th Fibonacci Number One-Liner in C

1,000,000th Fibonacci Number One-Liner in C

September 9th, 2009

This is possibly the best one-liner I’ve ever written:

gcc -x c -o /tmp/out - -lgmp <<< '#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <gmp.h>
void omg_i_love_leonardo_of_pisa(uint32_t num, mpz_t * result) { mpz_t retval, last, tmp; mpz_init(retval);
 mpz_init(last); mpz_init(tmp); uint32_t i = 1; if(num == 0) return; mpz_set_ui(retval, 1U);
mpz_set_ui(last, 0U); for(; i < num; i++) { mpz_set(tmp, retval); mpz_add(retval, retval, last);
mpz_set(last, tmp); } mpz_set(*result, retval); } int main() { uint32_t num; mpz_t fibo; mpz_init(fibo);
omg_i_love_leonardo_of_pisa(1000001, &fibo); mpz_out_str(stdout, 10, fibo); printf("\n"); return 1; }
' && time /tmp/out

It compiles a C program given from STDIN, puts it in /tmp/out, and runs it with time to find the time it takes to run. It generates the 1,000,000th Fibonacci number. Try it!


, , , , , , ,

  1. Robert Ottignon
    December 10th, 2009 at 21:01 | #1

    Python code for generating 1000,000th number in the Fibonacci sequence (or any number, the attribute of c):

    # Fibonacci in Python 3.0
    i=0
    c=1000000
    # Sets number you want program to stop at.
    x=0
    y=1
    while i< =c:
    	print ("  ")
    	print ("  ")
    	print ("Fibonacci number ",i," = ",x)
    	y=y+x
    	i=i+1
    	if i<=c:
    		print ("  ")
    		print ("  ")
    		print ("Fibonacci number ",i," = ",y)
    		x=x+y
    		i=i+1
    	else:
    		break
    
  2. December 10th, 2009 at 21:37 | #2

    Robert:

    Thanks for the comment. That isn’t a bad way to generate the number, and if I slightly modify it, it does:

    
    # Fibonacci in Python 3.0
    i=0
    c=1000000
    # Sets number you want program to stop at.
    x=0
    y=1
    while i<=c:
      y=y+x
      i=i+1
      if i<=c:
        x=x+y
        i=i+1
      else:
        break
    
    print ("  ")
    print ("  ")
    print ("Fibonacci number ",i," = ",y)
    

    Yet, it takes over 3 times as long as my example

    Your script: 0m59.591s
    My program: 0m17.435s

  1. No trackbacks yet.