模重复平方计算法

来源:互联网 发布:北京市软件协会 编辑:程序博客网 时间:2024/05/22 03:40

本人用了容器:queue存放一个整数的二进制形式,然后用迭代依次访问元素。本人重写了求余,为了产生的余数为正数。
头文件:模重复平法.h

#include<iostream>#include<queue>using namespace std;int Mod(int a ,int b)                 //求模{    while(a<0)    {        a +=b;    }    return a%b;}void Binary_queue(queue<int>&q , int n)   //将数字转换成二进制,然后写进队列{    int yu;    while( n / 2 != 1)    {        yu = n % 2;        q.push(yu);        n = n / 2;    }    yu=n%2;    q.push(yu);    q.push(1);}int Result(queue<int>&q ,int b ,int m)          //计算模重复平方的结果{    int a=1;    while( q.size() != 0 )    {        int t=q.front();        q.pop();        if( t ==1 )        {            a= Mod(a * b , m) ;            b= Mod(b * b , m);        }        else        {            b=Mod( b * b , m);        }    }    return a;}

cpp文件:模重复平方计算法.cpp

#include"模重复平方.h"int main(){    queue<int> q;    int n,b,m;    cout<<"请输入指数:n=";    cin>>n;    cout<<"请输入底数:b=";    cin>>b;    cout<<"请输入模:mod=";    cin>>m;    Binary_queue(q,n);    cout<<"结果为:"<<Result(q,b,m)<<endl;}

演示样例:

0 0
原创粉丝点击