int main (void) { bignum_t * prime = bignum_pow (2, 7830457, DIGITS_TO_CONSIDER); prime = bignum_mult_to (prime, 28433); prime = bignum_add_to (prime, bignum_get (1)); prime->used = DIGITS_TO_CONSIDER; bignum_print (prime); bignum_delete (prime); return 0; }
Bool bignum_plrt(BigNum b1, int e, BigNum *b0) { //---- 局所宣言 BigNum low; // 下端 BigNum hig; // 上端 BigNum mid; // 中央 BigNum val; // 累乗値 int sft; // 上端の節数 int cmp; // 大小比較の結果 //---- 初期処理 bignum_init(&low, 0); bignum_init(&hig, 1); sft = (UNI-1)/e; bignum_shift(&hig, sft); //---- 計算処理 while ( bignum_near(low, hig, 1) == 0 ) { bignum_add(low, hig, &mid); bignum_half(&mid); bignum_pow(mid, e, &val); cmp = bignum_cmp(val, b1); if ( cmp == 0 ) { break; } else if ( cmp > 0 ) { hig = mid; } else { low = mid; } } //---- 事後処理 *b0 = mid; bignum_chk(b0); //---- 返却処理 return TRUE; // 正常に処理完了 }