mpz사용법
_mp_alloc: 할당된 배열의 갯수
_mp_size: 사용갯수*부호
_mp_d: 배열의 포인터
1) _mpz_t A 로 선언한다
2) _mpz_init(A)로 init을 해준다.
init을 하면 _mp_alloc은 1로, _mp_size 0으로, _mp_d도 설정된다!
3)
_mp_d[0]에 넣어주고
_mp_size를 바꾸어준다!
_mp_alloc도 바꾸어주어야 한다!
or
mpz_set_str(a, "ffff666699999999aaaaaaaa", 16);
4)
mpz_clear(A);
mpx_init2(A,1500);alloc이 1500비트로!
mpz_urandomm(m, state, n);//n보다 작은 message
mpz_urandmob(p, state, size)
mpz_probab_prime_p(p, mr_itr)
mpz_gcd(n, p, e);
mpz_mul(n, p, q);
mpz_invert(d, e, n);
mpz_add(plus, a, b);
mpz_sub(minus, a, b);
mpz_powm(c, m, e, n);
mpz_mul_2exp(a1__b1,a1__b1, 2048);//2^2048곱해주기!
바꿔주기! mpz_set(big_a, a);
mpz_realloc2(c, (i << 5));
mpz_cmpabs(a, b) >= 0
Return a positive value if |op1| > |op2|,
zero if |op1| = |op2|,
or a negative value if |op1| < |op2|.
START_WATCH;
STOP_WATCH;
PRINT_TIME("~~");
state사용법
1) gmp_randstate_t state;
2) gmp_randinit_default(state);
KOA에서 쪼개기
for (i = 0; i < 32; i++)
{
a1->_mp_d[i] = a->_mp_d[i + 32];
a0->_mp_d[i] = a->_mp_d[i];
b1->_mp_d[i] = b->_mp_d[i + 32];
b0->_mp_d[i] = b->_mp_d[i];
}
질문
mpz_ptr
mpz_t
mpz_srcptr
차이점!