zoukankan      html  css  js  c++  java
  • a的b次方模n算法

    当b好大时,使用该算法是最好的选择。常应用于密码学:

    代码:

    /*
    File:                 abn.c
    Description:          求 a的b次方模n的通用算法
    Author:               hanxi
    */
    
    #include <stdio.h>
    #include <math.h>
    
    int f(int a, int b, int n)
    {
        int c=0, d=1;
        int i;
        for (i=31; i>=0; i--)
        {
            d = (d*d) % n;
            c *= 2;
            int tmp;
            tmp = 1<<i;
            //printf("tmp=%d\n",tmp);
            if ((b&tmp)!=0)
            {
                d = (d*a) % n;
                c++; 
            }
        }
        return d;
    }
    
    int main()
    {
        int a = 2, b = 5, n = 10;
        printf("求a的b次方模n\n");
        printf("请输入a,b,n(用逗号隔开,如果a,b,n全为0则退出系统):");
        scanf("%d,%d,%d",&a,&b,&n);
        printf("a=%d,b=%d,n=%d\n",a,b,n);
        while (a!=0 && b!=0 && n!=0)
        {
            int d = f(a,b,n);
            printf("%d的%d次方模%d=%d\n",a,b,n,d);
            int x = pow(a,b);
            printf("%d的%d次方模%d=%d\n",a,b,n,x%n);
            printf("请输入a,b,b(用逗号隔开):");
            scanf("%d,%d,%d",&a,&b,&n);
            printf("a=%d,b=%d,n=%d\n",a,b,n);
        }
        printf("程序已结束...");
        return 1;
    }

    作者:涵曦www.hanxi.cc
    出处:hanxi.cnblogs.com
    GitHub:github.com/hanxi
    Email:im.hanxi@gmail.com
    文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    《 Skynet 游戏服务器开发实战》

  • 相关阅读:
    RSA算法
    随机数相关面试题
    黑冰
    Servlet
    中国文人的弱点
    黑客与画家
    J2SE、JS及JavaWeb的若干知识
    离婚前规则
    自己写的一个智能指针类
    用_makepath和_splitpath构造路径&分解路径
  • 原文地址:https://www.cnblogs.com/hanxi/p/2471278.html
Copyright © 2011-2022 走看看