- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先,这不是“这是我的代码,有什么问题?”问题。相反,它是“这是我的代码,这就是问题所在,我误解了数组的哪一部分?”。我希望这些问题之间的区别意味着这篇文章不会惹恼太多人;我希望提高自己的知识,而不是让其他人为我工作。
我确定我遇到的问题是由于我对数组工作原理的理解中的一个基本问题(希望容易解释)。我是自学成才的,我的问题太具体了,无法从 Google 寻求任何帮助。
我将快速解释我的代码的每一部分的作用,以防它很重要,如果这无关紧要(它应该是 RSA 算法的加密部分),我深表歉意:
int returnVal (char x)
{
return (int) x - 87;
}
这会将字母转换为数字,a=10, b=11, ... z=35。
unsigned long long modExp(unsigned long long b, unsigned long long e, unsigned long long m)
{
unsigned long long remainder;
int x = 1;
while (e != 0)
{
remainder = e % 2;
e= e/2;
if (remainder == 1)
x = (x * b) % m;
b= (b * b) % m;
}
return x;
}
这部分只是我自己的模幂和化简函数,根据:a ^ b (mod n) = a ^ c (mod n) * a ^ d (mod n) where c + d = b。它是为了允许快速使用大值(并且还避免了浮点错误)。这个函数本身运行良好(很多答案已经使用 wolfram alpha 检查过)但我已经包含它以防与我的数组结合时出现某种错误。
int main()
{
unsigned long long p = 101;
unsigned long long q = 103;
int e = 7;
unsigned long long n = p * q;
std::string s = "ab";
for (unsigned long long i = 0; i < s.length(); i++)
{
std::cout << modExp (returnVal(s[i]), e, n);
}
}
这是我遇到问题的地方,我正在尝试使用数组将“ab”组合成“1011”,然后执行 RSA 算法。 目前它正在执行 10 ^ 7 (mod 10403) = 2717 和 11 ^ 7 (mod 10403) = 2352 并给出“27172352”的输出。我想要发生的是让它执行 1011 ^ 7 (mod 10403) = 2122 并将其作为输出(对于那些直接跳到问题的人,我将这部分加粗)。
显然,我尝试使用数组将“ab”与“1011”组合起来的尝试是错误的。我的问题是为什么错了?有没有办法调整它以使其正确?如果不是,我应该采用什么新方法来将这些数字组合在一起?
如果问题有点长,我很抱歉,但我宁愿过于具体也不愿过于模糊,感谢您的任何反馈,我将在下面粘贴我的代码,以便将它们放在一个地方。 (此外,我使用的是 unsigned long long,因为通常 p 和 q 会大得多)
#include <iostream>
#include <sstream>
#include <string>
#include <math.h>
int returnVal (char x)
{
return (int) x - 87;
}
unsigned long long modExp(unsigned long long b, unsigned long long e, unsigned long long m)
{
unsigned long long remainder;
int x = 1;
while (e != 0)
{
remainder = e % 2;
e= e/2;
if (remainder == 1)
x = (x * b) % m;
b= (b * b) % m;
}
return x;
}
int main()
{
unsigned long long p = 101;
unsigned long long q = 103;
int e = 7;
unsigned long long n = p * q;
std::string s = "ab";
for (unsigned long long i = 0; i < s.length(); i++)
{
std::cout << modExp (returnVal(s[i]), e, n);
}
}
最佳答案
如果我理解正确的话:
您需要做的就是让 returnVal
接受 char *
或 std::string
并将整个字符串传递给它你有。然后它应该一个一个地转换字符并添加(在你将 out 变量乘以 100 之后,假设你想坚持使用十进制数字)到一个(可能是巨大的)整数输出。不过,我建议改用十六进制,因为它应该更快(移位与乘以 100 相比)。
编辑:
该函数看起来类似于:
unsigned long long returnVal(char *str, size_t length){
unsigned long long result = 0;
for(unsigned int i=0;i<length;++i){
// Do stuff :D
}
return result;
}
我将 int 更改为 unsigned long long
因为值会很快变大。不过,在现实世界的实现中,它还是太小了。
关于c++ - C++中对数组的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22108653/
所以我实际上正在阅读有关用于删除对象属性的“delete”方法的文档,并且我偶然发现了这个“此外,您不能删除使用 var 关键字声明的全局对象的属性。” 所以我真正理解的是:假设你创建了一个数组: v
我目前正在学习 Javascript,我想知道为什么下面的代码会执行“console.log('why')”。我认为“变量”(var、let、const)仅存储信息,不能自行执行。我不希望以下内容实际
在许多博客和引用文献中,我读到了有关冲洗刷新记录的信息,其中有很多信息会引起头痛和一些误解: 是否为复制的碎片保留了事务日志?为什么? 如果GET /_cat/allocation包含转记录? 超过磁
我有下一个循环: rolling_average_delta_follower=[]; followers=[32,34,36,38,40,42,44,46,48,50,52,54,5
我遇到了多处理问题;我在 linux 2.6.36 上使用 python2.7。我知道使用更高级别的模块或库会容易得多,但我正在尝试使用较低级别的函数(os.fork() 和 os.exec*)以确保
有人可以向我解释一下,为什么这段代码不起作用。我正在浏览周围的一些问题,但找不到答案。可能是因为(大量)缺乏知识。 感谢您提供的任何帮助。 char** sentence = malloc(min);
我的目标是我想用一些 java 代码登录到一个站点,并在登录后做一些工作。(为了编写一些 java cooking 处理,我首先需要了解这一切实际上是如何工作的)问题是我不太清楚如何管理 cookie
给定以下非常简单的结构: struct A { int a; double b; }; (使用 Mac OS 10.9 - Xcode) 结构的大小是 16。我不明白为什么。为什么不是
我刚刚下载了基于 ASP.NET 5 的 music store (microsoft sample projct) 源代码。我不明白为什么 Microsoft 的开发人员在 Controller 中
Closed. This question is not reproducible or was caused by typos。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-to
我正在阅读 this doc并看到以下片段: The := syntax is shorthand for declaring and initializing a variable, e.g. fo
我在理解描述的 MixColumns 步骤时遇到问题 here . 我知道扩散,这一切都是有道理的,因为它指出每列都被视为多项式并乘以 GF(2^8) 的模。 但是..乘以GF(2 ^ 8)。尽管域仍
我尝试自定义HTML文件输入并编写了最简单的jquery API函数: (function($) { $.fn.selectFileInputGUI = function() {
我对 SSL/TLS 有一个根本性的误解,希望能得到澄清。 按照我的理解,当我获得网站证书时,它包含我的所有信息,并由我的证书颁发机构(VeriSign 或其他任何人)签名。当有人从我的网站请求使用
我们在代码中有一个 NamedTuple,如下所示: from typing import NamedTuple class StandardParameters(NamedTuple): o
我有一个问题,我需要你的帮助: 我正在制作一个 Web 应用程序来访问我需要在类似( ListView 或 DataList )这样的工具中显示他们的员工列表,以直接绑定(bind)数据库中的数据,并
我知道根是: 静态字段 方法参数 本地领域 f-queue 也包含一个指向“将要完成的”对象的指针 cpu 寄存器 <=??? 现在让我们谈谈寄存器。 它们可以包含的代码如下: mov bx, 003
官方例子Timer组件使用this.interval var Timer = React.createClass({ getInitialState: function() { retur
使用 PostGIS 我有两个表,第一个包含 250 个城市的边界,第二个包含世界上所有国家/地区的边界。 我试图影响每个城市所属的国家/地区。下面的查询可以让我得到我想要的结果。 SELECT DI
我正在准备数据库和 SQL 考试,并且正在解决一个练习: 我们有一个包含 4 个表的数据库,代表一家人力资源公司。这些表格是: applicant(a-id,a-name,a-city,years-
我是一名优秀的程序员,十分优秀!