一、任務(wù)詳情
- 在openEuler(推薦)或Ubuntu或Windows(不推薦)中完成下面任務(wù)
- 用自己8位學(xué)號(hào)建兩個(gè)文件夾xxxxxxxxsrc,xxxxxxxx,到GMP官網(wǎng)https://gmplib.org/下載最新代碼到201x1xxxsrc,編譯代碼并把GMP庫(kù)安裝到201x1xxx文件夾。(5')
- 基于GMP的大數(shù)庫(kù)計(jì)算你以及前面5位同學(xué)和后面5位同學(xué)的8位學(xué)號(hào)的乘積(5‘)
- 基于GMP的大數(shù)庫(kù)編寫測(cè)試代碼測(cè)試大數(shù)運(yùn)算,計(jì)算10000內(nèi)的素?cái)?shù)的乘積(5‘)
- 提交代碼(或代碼鏈接)和運(yùn)行結(jié)果截圖
二、安裝GMP
sudo apt-get install m4
tar -jvxf gmp-6.2.1.tar.bz2 //解壓
cd gmp-6.2.1
./configure --enable-cxx //開啟c++支持
./configure --prefix=home/qwc/Documents/test2/20201219 //設(shè)置安裝路徑
make
make check //注意必須檢測(cè)一下,gmp官方特別提醒的
sudo make install
安裝至20201219名字的文件夾中

三、基于GMP的大數(shù)庫(kù)計(jì)算你以及前面5位同學(xué)和后面5位同學(xué)的8位學(xué)號(hào)的乘積
#include<gmp.h>
#define N 20201219
int main()
{
mpz_t a[11], b;
mpz_init(b);
mpz_init_set_str(b, "1", 10);
const char s[11][9]={"20201214","20201215","20201216","20201217","20201218","20201219","20201220","20201221","20201222","20201223","20201224"};
int i;
for(i=0;i<11;i++)
{
mpz_init(a[i]);
mpz_init_set_str(a[i],s[i], 10);
mpz_mul(b, b, a[i]);
}
gmp_printf("%d*%d*%d*%d*%d*%d*%d*%d*%d*%d*%d = \n%Zd\n", N-5, N-4, N-3, N-2, N-1, N, N+1, N+2, N+3, N+4, N+5, b);
for(i=0;i<11;i++){
mpz_clear(a[i]);
}
mpz_clear(b);
return 0;
}
四、基于GMP的大數(shù)庫(kù)編寫測(cè)試代碼測(cè)試大數(shù)運(yùn)算,計(jì)算10000內(nèi)的素?cái)?shù)的乘積
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
int is_prime(mpz_t num)
{
if (mpz_cmp_ui(num, 2) <= 0)
return 0;
else if (mpz_cmp_ui(num, 2) == 0)
return 1;
else if (mpz_even_p(num))
return 0;
else
{
mpz_t i,flag,temp;
mpz_init(i);
mpz_init(flag);
mpz_init(temp);
mpz_set_ui(i, 3);
mpz_set_ui(temp, 2);
mpz_cdiv_q (flag, num, temp);
while (mpz_cmp(i, flag) <= 0)
{
if (mpz_divisible_p(num, i))
{
mpz_clear(i);
return 0;
}
mpz_add_ui(i, i, 2);
}
mpz_clear(i);
return 1;
}
}
int main()
{
int i;
mpz_t result, num;
mpz_init(result);
mpz_init(num);
mpz_set_ui(result, 1);
for (i = 2; i < 10000; i++)
{
mpz_set_ui(num, i);
if (is_prime(num))
mpz_mul(result, result, num);
}
char *result_str = mpz_get_str(NULL, 10, result);
printf("The result is: %s\n", result_str);
mpz_clear(result);
mpz_clear(num);
free(result_str);
return 0;
}
浙公網(wǎng)安備 33010602011771號(hào)