Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include<stdlib.h>
- #include<gmp.h>
- int main( int argc, char** argv )
- {
- int side = 100;
- int maxlen = side*2+4;
- int i, j, currentlen;
- mpz_t **currentlevel, **nextlevel, **templevel, result;
- if( currentlevel = (mpz_t **)malloc(sizeof(mpz_t)) )
- {
- printf( "First malloc successful\n" );
- }
- if( nextlevel = (mpz_t **)malloc(sizeof(mpz_t)) )
- {
- printf( "Second malloc successful\n" );
- }
- if( *currentlevel = (mpz_t *)malloc(maxlen*sizeof(mpz_t)) )
- {
- printf( "Third malloc successful\n" );
- }
- if( *nextlevel = (mpz_t *)malloc(maxlen*sizeof(mpz_t)) )
- {
- printf( "Fourth malloc successful\n" );
- }
- printf( "All mallocs done!\n" );
- printf( "Starting initialazation of mpz_t nums to zero\n" );
- // initialize mpz_t nums to zero
- for( i = 0; i < maxlen ; i++ )
- {
- mpz_init( *(*currentlevel+i) );
- mpz_init( *(*nextlevel+i) );
- }
- // initialization done!
- printf( "Initialization done!\n" );
- /* <--- NOTA COMMENTIN TIL AÐ HINDRA NÆSTA KAFLA Í AÐ KEYRA
- GETUR GERT TILRAUNIR MEÐ ÞETTA EF FORRIT KEYRIR OG
- printf() TEXTAR PRENTA ÚT. MÁLIÐ AÐ ÞRENGJA RAMMAN UTAN UM VILLUNA
- MEÐ ÚTILOKUNAR AÐFERÐINNI.
- MÉR ÞYKIR LÍKLEGT AÐ gmp.h HAFI EITTHVAÐ KLIKKAÐ Í UPPSETNINGU HJÁ ÞÉR
- ÞÁ ÆTTI KEYRSLA AÐKLIKKA UM LEIÐ (EÐA FLJÓTLEGA) OG VITNAÐ ER Í ÞAÐ.
- mpz_set_ui( *(*currentlevel+0), 1 ); // set first node to 1
- currentlen = 1;
- while( currentlen/2 <= side ) // currentlen/2 == currentlevel
- {
- i = 0;
- j = currentlen-1;
- while( i != j )
- { // i
- mpz_add( *(*nextlevel+i), *(*nextlevel+i), *(*currentlevel+i) ); // S
- mpz_add( *(*nextlevel+(i+1)), *(*nextlevel+(i+1)), *(*currentlevel+i) ); // SE
- mpz_add( *(*currentlevel+(i+1)), *(*currentlevel+(i+1)), *(*currentlevel+i) ); // E
- // j
- mpz_add( *(*currentlevel+(j-1)), *(*currentlevel+(j-1)), *(*currentlevel+j) ); // S
- mpz_add( *(*nextlevel+(j+1)), *(*nextlevel+(j+1)), *(*currentlevel+j) ); // SE
- mpz_add( *(*nextlevel+(j+2)), *(*nextlevel+(j+2)), *(*currentlevel+j) ); // E
- i++;
- j--;
- }
- // middle
- mpz_add( *(*nextlevel+i), *(*nextlevel+i), *(*currentlevel+i) ); // S
- mpz_add( *(*nextlevel+(i+1)), *(*nextlevel+(i+1)), *(*currentlevel+i) ); // SE
- mpz_add( *(*nextlevel+(i+2)), *(*nextlevel+(i+2)), *(*currentlevel+i) ); // E
- mpz_set( result, *(*currentlevel+i) ); // save middle as possible result
- // swap levels, do not lose pointers to heap
- templevel = currentlevel;
- currentlevel = nextlevel;
- nextlevel = templevel;
- // reset next level to zero
- for( i = 0 ; i < maxlen ; i++ )
- {
- mpz_set_ui( *(*nextlevel+i), 0 );
- }
- // increment currentlen
- currentlen += 2;
- }
- gmp_printf( "%Zd\n", result );
- HÉR ENDAR KOMMENTIÐ SEM ÉG SETTI INN */
- // just for correctness not needed
- free(*currentlevel);
- free(currentlevel);
- free(*nextlevel);
- free(nextlevel);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement