Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. #include<gmp.h>
  4.  
  5. int main( int argc, char** argv )
  6. {
  7.     int side = 100;
  8.     int maxlen = side*2+4;
  9.     int i, j, currentlen;
  10.  
  11.     mpz_t **currentlevel, **nextlevel, **templevel, result;
  12.     if( currentlevel = (mpz_t **)malloc(sizeof(mpz_t)) )
  13.     {
  14.         printf( "First malloc successful\n" );
  15.     }
  16.     if( nextlevel = (mpz_t **)malloc(sizeof(mpz_t)) )
  17.     {
  18.         printf( "Second malloc successful\n" );
  19.     }
  20.     if( *currentlevel = (mpz_t *)malloc(maxlen*sizeof(mpz_t)) )
  21.     {
  22.         printf( "Third malloc successful\n" );
  23.     }
  24.     if( *nextlevel = (mpz_t *)malloc(maxlen*sizeof(mpz_t)) )
  25.     {
  26.         printf( "Fourth malloc successful\n" );
  27.     }
  28.     printf( "All mallocs done!\n" );   
  29.  
  30.     printf( "Starting initialazation of mpz_t nums to zero\n" );
  31.     // initialize mpz_t nums to zero
  32.     for( i = 0; i < maxlen ; i++ )
  33.     {
  34.         mpz_init( *(*currentlevel+i) );
  35.         mpz_init( *(*nextlevel+i) );
  36.     }
  37.     // initialization done!
  38.     printf( "Initialization done!\n" );
  39.  
  40. /* <--- NOTA COMMENTIN TIL AÐ HINDRA NÆSTA KAFLA Í AÐ KEYRA
  41.     GETUR GERT TILRAUNIR MEÐ ÞETTA EF FORRIT KEYRIR OG
  42.     printf() TEXTAR PRENTA ÚT. MÁLIÐ AÐ ÞRENGJA RAMMAN UTAN UM VILLUNA
  43.     MEÐ ÚTILOKUNAR AÐFERÐINNI.
  44.  
  45.     MÉR ÞYKIR LÍKLEGT AÐ gmp.h HAFI EITTHVAÐ KLIKKAÐ Í UPPSETNINGU HJÁ ÞÉR
  46.     ÞÁ ÆTTI KEYRSLA AÐKLIKKA UM LEIÐ (EÐA FLJÓTLEGA) OG VITNAÐ ER Í ÞAÐ.
  47.                    
  48.     mpz_set_ui( *(*currentlevel+0), 1 ); // set first node to 1
  49.     currentlen = 1;
  50.     while( currentlen/2 <= side ) // currentlen/2 == currentlevel
  51.     {
  52.         i = 0;
  53.         j = currentlen-1;
  54.         while( i != j )
  55.         {   // i
  56.             mpz_add( *(*nextlevel+i), *(*nextlevel+i), *(*currentlevel+i) ); // S
  57.             mpz_add( *(*nextlevel+(i+1)), *(*nextlevel+(i+1)), *(*currentlevel+i) ); // SE
  58.             mpz_add( *(*currentlevel+(i+1)), *(*currentlevel+(i+1)), *(*currentlevel+i) ); // E
  59.  
  60.             // j
  61.             mpz_add( *(*currentlevel+(j-1)), *(*currentlevel+(j-1)), *(*currentlevel+j) ); // S
  62.             mpz_add( *(*nextlevel+(j+1)), *(*nextlevel+(j+1)), *(*currentlevel+j) ); // SE
  63.                     mpz_add( *(*nextlevel+(j+2)), *(*nextlevel+(j+2)), *(*currentlevel+j) ); // E
  64.             i++;
  65.             j--;
  66.         }
  67.         // middle
  68.         mpz_add( *(*nextlevel+i), *(*nextlevel+i), *(*currentlevel+i) ); // S
  69.         mpz_add( *(*nextlevel+(i+1)), *(*nextlevel+(i+1)), *(*currentlevel+i) ); // SE
  70.             mpz_add( *(*nextlevel+(i+2)), *(*nextlevel+(i+2)), *(*currentlevel+i) ); // E
  71.         mpz_set( result, *(*currentlevel+i) ); // save middle as possible result
  72.  
  73.         // swap levels, do not lose pointers to heap
  74.         templevel = currentlevel;
  75.         currentlevel = nextlevel;
  76.         nextlevel = templevel;
  77.  
  78.         // reset next level to zero
  79.         for( i = 0 ; i < maxlen ; i++ )
  80.         {
  81.             mpz_set_ui( *(*nextlevel+i), 0 );
  82.         }
  83.  
  84.         // increment currentlen
  85.         currentlen += 2;
  86.     }
  87.  
  88.         gmp_printf( "%Zd\n", result );
  89.  
  90. HÉR ENDAR KOMMENTIÐ SEM ÉG SETTI INN */
  91.  
  92.     // just for correctness not needed
  93.     free(*currentlevel);
  94.     free(currentlevel);
  95.     free(*nextlevel);
  96.     free(nextlevel);
  97.  
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement