您的位置:首页 > 其它

模重复平方计算法

2015-11-14 13:52 323 查看
本人用了容器: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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: