模重复平方计算法

2019-04-13 15:35发布

本人用了容器:queue存放一个整数的二进制形式,然后用迭代依次访问元素。本人重写了求余,为了产生的余数为正数。
头文件:模重复平法.h #include #include 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<<"结果为:"< 演示样例: