[英]C++: implementing Modular Exponentiation
我正在使用我更正的這個新的和改進的代碼來解決我遇到的這個問題。
我正在使用模塊化冪運算來使用公式 [a^k mod n] 來獲得我必須做的作業的答案,我需要在兩個步驟中對其進行編碼。
首先int k 必須轉換為由 0 和 1 組成的二進制表示 K。 其次,模冪運算必須使用a
、 n
和K[]
作為參數來執行。
早些時候我的代碼不正確並且能夠更正它。
我現在面臨的問題是,當我用谷歌搜索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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.