任务详情
0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 1. 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到[GMP官网https://gmplib.org/](https://gmplib.org/)下载最新代码到201x1xxxsrc,编译代码并把GMP库安装到201x1xxx文件夹。(5') 2. 基于GMP的大数库编写测试代码测试大数运算,计算10000内的素数的乘积(5‘) 3. 基于GMP的大数库计算你以及前面5位同学和后面5位同学的8位学号(数字)的乘积(5‘) 4. **提交代码(或代码链接)和运行结果截图**
1. 用自己8位学号建两个文件夹xxxxxxxxsrc,xxxxxxxx,到[GMP官网https://gmplib.org/](https://gmplib.org/)下载最新代码到201x1xxxsrc,编译代码并把GMP库安装到201x1xxx文件夹。
2. 基于GMP的大数库编写测试代码测试大数运算,计算10000内的素数的乘积
#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; }
运行结果
3. 基于GMP的大数库计算你以及前面5位同学和后面5位同学的8位学号(数字)的乘积
#include<gmp.h> #define N 20201208 int main() { mpz_t a[11], b; mpz_init(b); mpz_init_set_str(b, "1", 10); const char s[11][9]={"20201203","20201204","20201205","20201206","20201207","20201208","20201209","20201210","20201211","20201212","20201213"}; 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,https,大数,位学,测试,include,mpz From: https://www.cnblogs.com/syf0105/p/17386905.html