문제
가 발견되어 내는 당황,그것을 먹이는 부정 지수를 mpz_pow_ui
이 작동하지 않습니다.("설명서는 말 unsigned long,당신은 알아요.") 에 대한 다른 mpz_pow
기능,설명서 사용하는 개념에 내가 이해하지 못합니다.예를 들어"base^exp 모 모"에서 다음과 같다:
void mpz_powm (mpz_t rop, mpz_t base, mpz_t exp, mpz_t mod)
void mpz_powm_ui (mpz_t rop, mpz_t base, unsigned long int exp, mpz_t mod)
Set _rop_ to _base_^_exp_ mod _mod_.
Negative exp is supported if an inverse base-1 mod mod exists (see mpz_invert in Section 5.9 [Number Theoretic Functions], page 35). If an inverse doesn’t exist then a divide by zero is raised.
다음 코드에서 어떻게해야하는,그래서 이것을 처리할 수 있는 부정적인 지?
#define Z(x) mpz_t x; mpz_init( x );
BSTR __stdcall IBIGPOWER(BSTR p1, long p2 ) {
USES_CONVERSION;
Z(n1);
Z(res);
LPSTR sNum1 = W2A( p1 );
mpz_set_str( n1, sNum1, 10 );
mpz_pow_ui( res, n1, p2 );
char * buff = (char *) _alloca( mpz_sizeinbase( res, 10 ) + 2 );
mpz_get_str(buff, 10, res);
BSTR bResult = _com_util::ConvertStringToBSTR( buff );
return bResult;
}
다른 팁
나는 자르지 않을 것 코드에 당신을 위해 하지만 나는 당신이 알고 있:
2-n = 1/2n
그래서 그냥 통과하는 긍정적인 지수 그럼 나누어 1 에 해당 번호(선택 아닌 정수 타입 mpf_t
-이 mpz_t
형식은 필수할 수 있도록 실제와 같은 숫자 2-18
).
나는에 대해 많이 알지 못 GMP 만:
2 ^ -18
에 해당합니다:
1 / (2 ^ 18)
왜 그렇게 쓰지 않는 기능을 처리적인 부분에서는 이 방법이 있을까?
부정적인 특급이 지원되는 경우 역 base-1mod 모드 존재하십시오( mpz_invert 섹션에서 5.9[Number 이론적 함수],35 페이지).는 경우 반대 존재하지 않음 나누기 제가 발생합니다.
만약 당신이 그것에 대해 이야기하고,그 포함수론.부서,또는 더 정확하게 반대의 multplication,만 존재하는 특정 조건에.누구에게도 뒤지지 않는 규칙을 기억하지만,기본적으로 말하는 작업 부문 작동하지 않을 경우 base-1 모 모 이 존재하지 않습니다.
당신은 무엇을 할 필요에 따라 당신이 원하는 무슨 일이 일어날는 비트와 잃은 것에서 작업입니다.때문에 당신과 함께 다루고 있는 정수를 올리는 부정적인 힘을 의미한 부문에(물론,보복)하지만 GMP 제공하는 여러 가지 형태의 부문.