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;
}
Beispiel #2
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;    // 正常に処理完了
}