C :实施模块化指数
C++: implementing Modular Exponentiation
我正在使用此新的和改进的代码,以解决我遇到的这个问题。
我正在使用模块化指数来使用公式[a^k mod n]来获得我必须做的分配的答案,而我必须在两个步骤中进行编码。
第一 int k必须转换为二进制表示k由0和1的列表组成。其次,必须进行模块化指数使用a
,n
和K[]
作为参数..
之前,我的代码不正确,并且能够纠正它。
我现在遇到的问题是,当我用Google Google Google在线计算器进行5^3 % 13
的模块化启动器时,它应该== 8
我从代码中获得的结果是5。我试图了解我是否缺少该代码中的未成年人,还是我的数学错误是错误的?谢谢
#include <iostream>
#include <vector>
using namespace std;
vector <int> BinaryK(int k);
int ModularExpo(int a, vector <int> & k, int n);
int main()
{
int a = 0;
int k = 0;
int n = 0;
cout << "a^k % n" << endl;
cout << "a = ";
cin >> a;
cout << "k = ";
cin >> k;
cout << "n = ";
cin >> n;
vector<int> B = BinaryK(k);
int result = ModularExpo(a, B, n);
cout << "a ^ k mod n == " << result << endl;
return 0;
}
// c == b^e % m
vector<int> BinaryK(int k)
{
vector<int> K; //hint: make K a vector
int tmp = k;
while (tmp > 0)
{
K.push_back(tmp % 2); //hint: use pushback
tmp = tmp / 2;
}
return K;
}
int ModularExpo(int a, vector<int> & K, int n)
{
if (n == 1)
return 0;
int b = 1;
if (K.size() == 0)
return b;
int A = a;
if (K[0] == 1)
b = a;
for (int i = 1; i < K.size() - 1; i++)
{
A = A * A % n;
if (K[i] == 1)
b = A*b % n;
}
return (b);
}
更改此一行:
for (int i = 1; i < K.size(); i++) // K.size() not K.size()-1
相关文章:
- 为什么当我解模块化时,这个C++代代码"效率较低"?
- 电源功能模块化操作
- 如何为模块化应用程序实现C++插件系统
- Arduino 模块化编程与全局和设置
- C++:快速模块化指数
- 为 n 维系统实现模块化龙格-库塔四阶方法
- OpenSSL模块化最大数据类型大小的简单方法
- 模块化算术 - 竞争性编程
- 模块化菜单和矢量实例化
- 在C++模块化编程中,如何组装.cpp和.h文件
- 如何在C 中找到模块化乘法逆
- C :实施模块化指数
- 模块化功能背后的逻辑
- 使用模块化算法将积分器转换为数组时出现问题
- 如何为模块化项目正确创建 CMake 文件
- MFC最佳实践和模块化
- C++ 中大数的模块化乘法
- 模块化C++设计
- 模块化和灵活的编程
- 选择用于模块化开发的相互通信方法