Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.49 KB | None | 0 0
  1. int exponentiate(bn_t base,bn_t exponent,bn_t result){
  2.   int size=get_bn_size(exponent);
  3.   char buffer[size];
  4.   bn_t tempRemainder = bn_alloc();
  5.   bn_t tempDenominator=bn_alloc();
  6.   bn_t tempRes=bn_alloc();
  7.   bn_t tempExponent=bn_alloc();
  8.   bn_fromString(tempDenominator,"2");
  9.   bn_t one=bn_alloc();
  10.   bn_fromString(one,"1");
  11.  
  12.   if(!strncmp(buffer, "0",size)){
  13.     bn_fromString(result, "1");
  14.   }
  15.  
  16.   else if(!strncmp(buffer,"1",size)){
  17.     bn_toString(base,buffer,size);
  18.     bn_fromString(result,buffer);
  19.   }
  20.   else if(base->bn_data[0]%2==0){
  21.     //calculate for even bn
  22.     bn_mul(result, base, base);
  23.     bn_div(tempExponent,tempRemainder,exponent,tempDenominator);
  24.     printf("%s%d\n","EVEN NUMBER ",tempExponent->bn_data[0]);
  25.     bn_toString(tempExponent,buffer,size);
  26.     bn_fromString(exponent,buffer);
  27.     bn_free(tempDenominator);
  28.     bn_free(tempRemainder);
  29.     bn_free(tempExponent);
  30.     exponentiate(result,result,exponent);
  31.  
  32.   }
  33.   else if(base->bn_data[0]%2==1){
  34.     bn_mul(tempRes, base, base);
  35.     bn_sub(tempExponent,exponent,one);
  36.     bn_div(tempExponent,tempRemainder,exponent,tempDenominator);
  37.     printf("%s%d\n","ODD NUMBER ",tempExponent->bn_data[0]);
  38.     bn_toString(tempExponent,buffer,size);
  39.     bn_fromString(exponent,buffer);
  40.     bn_free(tempDenominator);
  41.     bn_free(tempRemainder);
  42.     bn_free(one);
  43.     bn_free(tempExponent);
  44.     //calculate for odd bn
  45.     exponentiate(result,result,exponent);
  46.     bn_mul(result,tempRes,result);
  47.   }
  48.  
  49.   return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement