나는 많은 수의 사용 C에서 다음 (의사 코드 - 파이썬)를 구현하기 위해 노력하고있어 사용 "중단됨"프로그램 : 나는 다음과 같은 사용 내놓았다GNU MP "많은 수의"라이브러리
while i * i < n:
if n % i:
i += 1
을 gmp.h
라이브러리 : 나는 GCC로 컴파일 그런데 프로그램을 실행하려고 할 때 다음과 같은 Aborted
을 얻을 때
#include <stdio.h>
#include <gmp.h>
int main() {
mpz_t n;
mpz_t i;
mpz_t o; // Hold constant mpz "1" for incrementing i
mpz_t x; // Holds "i * i" each loop
mpz_set_str(n, "338852330881981183", 10);
mpz_set_str(i, "2", 10);
mpz_set_str(o, "1", 10);
mpz_set_str(x, "4", 10);
while(mpz_cmp(x, n) < 0) {
mpz_add(i, i, o);
mpz_pow_ui(x, i, 2);
}
mpz_clear(i);
mpz_clear(n);
return 0;
}
나는 오류를하지 않습니다. 나는 전에 이것을 보지 못했고 C로 많이 프로그래밍하지 않고 gmp.h
과 매우 큰 숫자를 사용했다.
*** glibc detected *** ./factor: realloc(): invalid old size: 0x00000000004006d0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7fdc1eb7bd76]
/lib/x86_64-linux-gnu/libc.so.6(+0x7c94c)[0x7fdc1eb8194c]
/lib/x86_64-linux-gnu/libc.so.6(realloc+0xf0)[0x7fdc1eb81c60]
/usr/lib/x86_64-linux-gnu/libgmp.so.10(__gmp_default_reallocate+0x1c)[0x7fdc1ee98a1c]
/usr/lib/x86_64-linux-gnu/libgmp.so.10(__gmpz_realloc+0x3a)[0x7fdc1eeaebba]
/usr/lib/x86_64-linux-gnu/libgmp.so.10(__gmpz_set_str+0x301)[0x7fdc1eeafef1]
./factor[0x400810]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7fdc1eb23ead]
./factor[0x4006f9]
======= Memory map: ========
00400000-00401000 r-xp 00000000 08:01 1723311 /root/Desktop/factor
00600000-00601000 rw-p 00000000 08:01 1723311 /root/Desktop/factor
01629000-0164a000 rw-p 00000000 00:00 0 [heap]
7fdc18000000-7fdc18021000 rw-p 00000000 00:00 0
7fdc18021000-7fdc1c000000 ---p 00000000 00:00 0
7fdc1e8ef000-7fdc1e904000 r-xp 00000000 08:01 1445725 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdc1e904000-7fdc1eb04000 ---p 00015000 08:01 1445725 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdc1eb04000-7fdc1eb05000 rw-p 00015000 08:01 1445725 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fdc1eb05000-7fdc1ec85000 r-xp 00000000 08:01 1445701 /lib/x86_64-linux-gnu/libc-2.13.so
7fdc1ec85000-7fdc1ee85000 ---p 00180000 08:01 1445701 /lib/x86_64-linux-gnu/libc-2.13.so
7fdc1ee85000-7fdc1ee89000 r--p 00180000 08:01 1445701 /lib/x86_64-linux-gnu/libc-2.13.so
7fdc1ee89000-7fdc1ee8a000 rw-p 00184000 08:01 1445701 /lib/x86_64-linux-gnu/libc-2.13.so
7fdc1ee8a000-7fdc1ee8f000 rw-p 00000000 00:00 0
7fdc1ee8f000-7fdc1eef6000 r-xp 00000000 08:01 2240985 /usr/lib/x86_64-linux-gnu/libgmp.so.10.0.5
7fdc1eef6000-7fdc1f0f6000 ---p 00067000 08:01 2240985 /usr/lib/x86_64-linux-gnu/libgmp.so.10.0.5
7fdc1f0f6000-7fdc1f0fe000 rw-p 00067000 08:01 2240985 /usr/lib/x86_64-linux-gnu/libgmp.so.10.0.5
7fdc1f0fe000-7fdc1f11e000 r-xp 00000000 08:01 1445677 /lib/x86_64-linux-gnu/ld-2.13.so
7fdc1f2fb000-7fdc1f2fe000 rw-p 00000000 00:00 0
7fdc1f31b000-7fdc1f31d000 rw-p 00000000 00:00 0
7fdc1f31d000-7fdc1f31e000 r--p 0001f000 08:01 1445677 /lib/x86_64-linux-gnu/ld-2.13.so
7fdc1f31e000-7fdc1f31f000 rw-p 00020000 08:01 1445677 /lib/x86_64-linux-gnu/ld-2.13.so
7fdc1f31f000-7fdc1f320000 rw-p 00000000 00:00 0
7fffa2304000-7fffa2325000 rw-p 00000000 00:00 0 [stack]
7fffa23b2000-7fffa23b4000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted
컴파일 할 때 -lgmp 옵션을 넣으려고 했습니까? 그것은'gcc -lgmp'와 같아야합니다. – Garp
나는 doc을 읽지 않은 사람들이 C++ wrapper를 대신 사용하기를 희망한다. 에러가 발생하기 쉽다.'mpz_class i; mpz_class n ("338852330881981183"); while (i * i
@MarcGlisse : 동의했지만, Juicy는 그의 질문을 C++가 아니라 C로 표기했습니다! –