• 大数


    1. 基于OpenSSL的大数库计算2的1232次方(5‘)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <openssl/bn.h>
    
    int main()
    {
            BN_CTX *r;
            BIGNUM *a;
            BIGNUM *b;
            BIGNUM *c;
            
            char *x;
        char s[]="2";
        char t[]="1232";
    
            r = BN_CTX_new();
            a = BN_new();
            b = BN_new();
            c = BN_new();
            
    
            BN_dec2bn(&a, s);
            BN_dec2bn(&b, t);
            BN_exp(c,a,b,r);//计算2^1232次方
    
            x = BN_bn2dec(c);//把计算结果(大数)转化成10进制数
           
    
            puts(x);//打印出x
            
    
            BN_free(a);
            BN_free(b);
            BN_free(c);
           
    
            BN_CTX_free(r);
           
    
            free(x);
          
    
            return 0;
    }

    结果截图:

    2. 基于OpenSSL的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积(5‘)

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <openssl/bn.h>
     
    int main()
    {
            BN_CTX *r[11];
            BIGNUM *bn[12];
            int i;
            const  char s[11][9]={"20191227","20191228","20191229","20191230","20191231","20191232","20191233","20191234","20191235","20191236","20191237"};
            char* out;
            char t[2]="1";
     
           
     
            for(i=0;i<11;i++){
            bn[i]=BN_new();
            BN_dec2bn(&bn[i],s[i]);
                r[i] = BN_CTX_new();   
            }
            bn[11]=BN_new();
            BN_dec2bn(&bn[11],t);
     
            for(i=0;i<11;i++){
                BN_mul(bn[11],bn[11],bn[i],r[i]); //计算11个同学学号的乘积
            }
     
            out= BN_bn2hex(bn[11]); //将大数转化转化成16进制的字符串
     
            puts(out);//打印出字符串
     
     
            for(i=0;i<11;i++){
        BN_free(bn[i]);
                      BN_CTX_free(r[i]);
         
            }
        BN_free(bn[i]);
     
            free(out);
     
            return 0;
    }

    结果截图:

    3. 用bc命令验证计算的正确性(5’)

    验证2的1232次方:

    验证前面5位同学和后面5位同学的8位学号的乘积:

  • 相关阅读:
    clip-path
    box-reflect
    循环内click赋值跳转
    github pages 不能识别下划线开头的文件
    Telerik Reporting
    VS2015项目发布失败且没有错误提示
    kendo grid 过滤器
    kendo 月份选择
    kendo grid过滤
    odata连接现有数据库
  • 原文地址:https://www.cnblogs.com/zhaojingle/p/16262280.html
Copyright © 2020-2023  润新知