계수가 너무 큽니다.

계수가 너무 큽니다.

유틸리티를 사용하려고 하는데 factor숫자가 너무 크다고 나옵니다. factor숫자가 너무 크다는 사실을 알려주지 않고 이를 수행할 수 있는 유틸리티가 있습니까 ?

답변1

아마도 귀하의 제품 factor은 으로 구축되지 않았기 GMP때문에 다음보다 큰 숫자를 처리할 수 없습니다 2**64-1.

$ factor 18446744073709551616
factor: `18446744073709551616' is too large
$ factor 18446744073709551615
18446744073709551615: 3 5 17 257 641 65537 6700417

factor다음 명령을 실행하여 다음을 사용하여 빌드되는지 확인합니다 GMP.

$ ldd /usr/bin/factor 
        linux-vdso.so.1 (0x00007fffda1fe000)
        libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007faae00f5000)
        libc.so.6 => /lib64/libc.so.6 (0x00007faadfd46000)
        /lib64/ld-linux-x86-64.so.2 (0x00007faae037c000)

일부 시스템에서는 제한이 더 높을 수 있지만(숫자는 uintmax_t유형에 맞아야 함) 숫자는 256비트 숫자이며 일반 시스템은 그렇게 큰 숫자 uintmax_t(있는 경우)를 지원하지 않습니다.

유틸리티는 다음을 factor사용하여 컴파일할 수 있습니다.좋은 제조 관행지원하다. 이 경우 숫자의 크기에는 사실상 제한이 없습니다. 배포판에서 GMP 지원을 활성화하지 않은 것 같습니다(거의 사용되지 않는 기능을 위해 핵심 시스템 패키지에 추가 라이브러리에 대한 종속성을 추가하므로 이는 의미가 있습니다).

가 있는 경우 모듈 에 프로그램을 포함시켜 perl볼 수 있습니다 .factor.plMath::Prime::Util

$ /home/cuonglm/.cpan/build/Math-Prime-Util-0.31-9c_xq3/bin/factor.pl 115792089237316195423570985008687907852837564279074904382605163141518161494337
115792089237316195423570985008687907852837564279074904382605163141518161494337: 115792089237316195423570985008687907852837564279074904382605163141518161494337

답변2

coreutils를 사용할 수도 있습니다 factor. 하지만 bignum 지원으로 컴파일되어야 합니다. 참고로 일부 배포판(예: Debian)과 함께 제공되는 바이너리는 (오류 608832). 단, GMP를 설치한 후 소스코드를 다운로드하여 재컴파일할 수 있습니다. (찾으면 기본으로 사용됩니다.)

또 다른 해결책은 Pari/GP(정수 이론으로 유명한)를 사용하는 것입니다.

? factor(806578020551755900412008880903137528217525975284037923)
%1 =
[ 238366085426200783161668947 1]

[3383778439410064898661524209 1]

이 숫자를 사용하면 몇 초 정도 걸립니다.

관련 정보