Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int exponentiate(bn_t base,bn_t exponent,bn_t result){
- int size=get_bn_size(exponent);
- char buffer[size];
- bn_t tempRemainder = bn_alloc();
- bn_t tempDenominator=bn_alloc();
- bn_t tempRes=bn_alloc();
- bn_t tempExponent=bn_alloc();
- bn_fromString(tempDenominator,"2");
- bn_t one=bn_alloc();
- bn_fromString(one,"1");
- if(!strncmp(buffer, "0",size)){
- bn_fromString(result, "1");
- }
- else if(!strncmp(buffer,"1",size)){
- bn_toString(base,buffer,size);
- bn_fromString(result,buffer);
- }
- else if(base->bn_data[0]%2==0){
- //calculate for even bn
- bn_mul(result, base, base);
- bn_div(tempExponent,tempRemainder,exponent,tempDenominator);
- printf("%s%d\n","EVEN NUMBER ",tempExponent->bn_data[0]);
- bn_toString(tempExponent,buffer,size);
- bn_fromString(exponent,buffer);
- bn_free(tempDenominator);
- bn_free(tempRemainder);
- bn_free(tempExponent);
- exponentiate(result,result,exponent);
- }
- else if(base->bn_data[0]%2==1){
- bn_mul(tempRes, base, base);
- bn_sub(tempExponent,exponent,one);
- bn_div(tempExponent,tempRemainder,exponent,tempDenominator);
- printf("%s%d\n","ODD NUMBER ",tempExponent->bn_data[0]);
- bn_toString(tempExponent,buffer,size);
- bn_fromString(exponent,buffer);
- bn_free(tempDenominator);
- bn_free(tempRemainder);
- bn_free(one);
- bn_free(tempExponent);
- //calculate for odd bn
- exponentiate(result,result,exponent);
- bn_mul(result,tempRes,result);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement