리눅스 C언어에서 [엄청~큰 숫자형]을 지원하는 라이브러리를 루트권한에서 설치!
apt-get install libgmp-dev
==============
팩토리얼이란?
https://ko.wikipedia.org/wiki/%EA%B3%84%EC%8A%B9
===========
$ cat 생코보다_만든c언어libgmp사용_팩토리얼.c
#include <stdio.h>
#include <gmp.h>
#include <time.h>
// https://kldp.org/node/129116 여기서 글올리신 분의 코드중에 설명이 필요한 부분에 주석달고, 코드중에는 출력과 입력부분을 수정했습니다.
void factorial(mpz_t* f, unsigned int n)
{
unsigned int i = 1;
for (i = 1; i <= n ; i++){ // 파라미터에서 정한 개수 만큼 반복해서 팩토리얼 하는 중.
mpz_mul_si(*f, *f, i); // http://gmplib.org/manual/Integer-Arithmetic.html#index-mpz_005fmul_005fsi-285
}
}
int main(int argc, char **argv)
{
mpz_t facN; //엄청~큰 변수
unsigned int n = atol(argv[1]);// 파라미터 1번의 값으로 총 팩토리얼 개수를 정함
clock_t start, end;
double runtime;
mpz_init(facN); // https://gmplib.org/manual/Initializing-Integers.html#index-mpz_005finit-244
mpz_set_ui(facN, 1L); //엄청~큰 변수 객체 초기화 등등 https://gmplib.org/manual/Assigning-Integers.html#index-mpz_005fset_005fui-253
start = clock(); //계산시작 타이머
factorial(&facN, n);//반복해서 팩토리얼 하는 함수 호출
end = clock(); //계산끝 타이머 종료
runtime = (double)(end-start) / CLOCKS_PER_SEC;
printf ("실행시간 %f초\n", runtime);
printf ("이하 파라미터로 지정된 %u의 팩토리얼 계산결과", n);
mpz_out_str(stdout, 10, facN); //계산완료된 변수를 출력하는 이부분에서... 위의 runtime보다 시간이 더 소모될수 있음.
printf("\n");
mpz_clear(facN);
}
=========
컴파일 명령어
gcc -o생코보다_만든c언어libgmp사용_팩토리얼 생코보다_만든c언어libgmp사용_팩토리얼.c -lgmp
============
실행명렁어
./생코보다_만든c언어libgmp사용_팩토리얼 1000000 > 생코보다_만든c언어libgmp사용_팩토리얼result.txt &
============
실행결과->생코보다_만든c언어libgmp사용_팩토리얼result.txt의 내용
실행시간 308.84초(실험용으로 쓰는 vmware에서 돌렸기 때문에, 빠른 컴퓨터에서는 더 좋은 결과가 나올듯)
이하 파라미터로 지정된 1000000의 팩토리얼 계산결과 --> txt파일 용량만 5.8매가이고, 556만자리라 로딩이 안될까봐 유툽 동영상으로 올림. http://youtu.be/1J_nmOL3Mmo