模重复平方计数法的C++实现

来源:互联网 发布:python ldap 编辑:程序博客网 时间:2024/06/06 08:43
/** @author Novicer* language : C++/C*/#include<iostream>#include<sstream>#include<fstream>#include<vector>#include<list>#include<deque>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cctype>#include<cmath>#include<ctime>#include<iomanip>using namespace std;const double eps(1e-8);typedef long long lint;lint b,n,m;int main(){    cout << "模重复平方计数法" << endl;    cout << "Author : Novicer and you" << endl;    cout << "ver : 0.1" << endl;    while(1){        cout << "输入 b^n(mod m) 中b , n , m值,空格分割,回车结束" << endl;        cin >> b >> n >> m;        lint b_begin = b;        lint n_begin = n;        lint i = 0;        lint a = 1;        int n_2 ;        cout << "计算过程如下:(式中“==”符号即恒等符号)" << endl;        cout << "a = " << a << ", b = b0 = " << b << endl;        if(n == 0)  printf("ans = 1\n");        while(n){            if(n & 1){                a = (a * b) % m;                n_2 = 1;            }            else{                n_2 = 0;            }            b = (b * b) % m;            n >>= 1;            cout << "n" << i << " = " << n_2 << ",  ";            cout << "a" << i << " == " << a << ",  ";            cout << "b" << i + 1 << " == " << "b" << i << "^2" << " == " << b << "(mod " << m << ")" << endl;            i++;        }        cout << "ans = " << a << endl;        printf("即: %lld^%lld == %lld(mod %lld)\n",b_begin,n_begin,a,m);    }    return 0;}
0 0
原创粉丝点击