홈>
C에서 데이터 유형에 대한 자체 제한을 설정할 수 있습니까? 나는 메가 큰 숫자와 관련된 문제를 해결하고 있으며 많은 덧셈과 곱셈을 수행하고 최종 결과를 원하는 수로 계산하려고합니다 (1537849). 따라서 데이터 유형의 한계를 재설정 할 수 있는지 궁금합니다 따라서 프로세서가 정상적으로 수행하지만 원하는 한계를 갖는 것처럼 연산의 결과가 지정된 숫자를 초과 할 때 원하는 수를 모듈로 자동으로 가져옵니다. 그런 일이 불가능하다면 그러한 문제를 협상하는 가장 효율적인 방법은 무엇입니까?
수정 :
(2 ^ 1000) % 1537849를 계산하고 결과를 변수
monster
에 배치하려고합니다.
. 아래는 문제를 극복하려는 나의 시도입니다 :
uint64_t monster = 1;
uint32_t power = 1000;
for (uint32_t i = 0; i < power; i ++ ) {
monster *= 2;
if (i%64==63) monster %= 1537849;
}
monster %= 1537849;
그렇게하는 더 좋은 방법이 있습니까 (다른 알고리즘, 라이브러리를 사용하여 ...)?
- 답변 # 1
- 답변 # 2
pow()
아니요. 자신 만의 컴파일러와 라이브러리를 작성하는 데 부족합니다.
와이즈 비즈부분적으로 많은 수를 처리하는 알고리즘이 있으며 ... 예를 들어 이미 작업을 수행하는 라이브러리가 있습니다. GNU 다중 정밀도 산술 라이브러리 (GMP)를 살펴보십시오.
uintmax_t addmodmax(uintmax_t a, uintmax_t b, uintmax_t mod); uintmax_t mulmodmax(uintmax_t a, uintmax_t b, uintmax_t mod); uintmax_t powmodmax(uintmax_t x, uintmax_t expo, uintmax_t mod);
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
와이즈 비즈
기본 타입의 한계는 컴파일러마다 고정되어 있습니다.
와이즈 비즈 덧셈과 곱셈의 모든 단계에서 코드는 모듈로를 반복적으로 수행 할 수 있습니다. 원래 숫자가 N 비트 인 경우 최대 2 비트 수학보다 필요하지만 2N 비트 수학으로 수행하는 것이 더 쉽습니다. 무제한 넓은 수학은 비효율적이며이 작업에는 필요하지 않습니다.+
모듈로 제한이있는 경우 :범위 제한이없는 모듈 식 지수