#include <stdio.h>
#include <openssl/bn.h>
int main()
{
int i, j, flag;
BIGNUM *prod = BN_new();
BIGNUM *num = BN_new();
BN_CTX *ctx = BN_CTX_new();
// 初始化 prod 为 1
BN_one(prod);
for(i=2; i<=1000; i++)
{
flag = 1;
// 判断 i 是否为素数
for(j=2; j*j<=i; j++)
{
if(i % j == 0)
{
flag = 0;
break;
}
}
if(flag)
{
// 将 i 转换为 BIGNUM 类型
BN_set_word(num, i);
// 计算 prod = prod * num
BN_mul(prod, prod, num, ctx);
}
}
// 输出结果
char *str = BN_bn2dec(prod);
printf("1000以内素数的乘积为:%s\n", str);
// 释放内存
BN_free(prod);
BN_free(num);
BN_CTX_free(ctx);
OPENSSL_free(str);
return 0;
}
2.
#include <stdio.h>
#include <openssl/bn.h>
int main()
{
int i;
BIGNUM *prod = BN_new();
BIGNUM *num = BN_new();
BN_CTX *ctx = BN_CTX_new();
// 初始化 prod 为 20201228
BN_set_word(prod, 20201228);
// 计算乘积
char digits[9];
for(i=1; i<=14; i++)
{
sprintf(digits, "2020122%d", i+4);
BN_dec2bn(&num, digits);
BN_mul(prod, prod, num, ctx);
}
// 输出结果
char *str = BN_bn2dec(prod);
printf("20201228到20201210的乘积为:%s\n", str);
// 释放内存
BN_free(prod);
BN_free(num);
BN_CTX_free(ctx);
OPENSSL_free(str);
return 0;
}