什么是未定义的参考/未解决的外部符号错误?什么是常见原因以及如何修复/预防它们?
随意编辑/添加您自己的.
c++ c++-faq linker-errors unresolved-external undefined-reference
在C++中处理大型数字输入的最佳方法是什么(例如10^100)?
对于算法,我通常切换到ruby,有时我会使用字符串.
还有其他好方法吗?
我想计算一个用于RSA解密的b mod n.我的代码(如下)返回错误的答案.这有什么问题?
unsigned long int decrypt2(int a,int b,int n)
{
unsigned long int res = 1;
for (int i = 0; i < (b / 2); i++)
{
res *= ((a * a) % n);
res %= n;
}
if (b % n == 1)
res *=a;
res %=n;
return res;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取21个字节的数据,这些数据唯一地标识交易并将其存储在16字节char数组中.我无法为此提出正确的算法.
我正在尝试压缩的交易ID包含2个字段:
所以包含这些数据的C++类看起来像这样:
class ID
{
public:
char trade_num_[18];
char broker_[3];
};
Run Code Online (Sandbox Code Playgroud)
这些数据需要存储在16- char数据结构中,如下所示:
class Compressed
{
public:
char sku_[16];
};
Run Code Online (Sandbox Code Playgroud)
我试图利用这样一个事实:由于字符trade_num_只有0-127,每个字符中有1个未使用的位.类似地,999二进制是1111100111,它只有10位 - 比2字节字短6位.但是当我弄清楚我能把它压缩多少时,我能做到的最小值是17个字节; 一个字节太大了.
有任何想法吗?
顺便说一句,trade_num_用词不当.它可以包含字母和其他字符.这就是规范所说的.
编辑:抱歉混乱.该trade_num_字段确实是18个字节,而不是16.在我发布此帖子后,我的互联网连接已经死亡,直到现在我才回到这个线程.
EDIT2:我认为对数据集做出假设是安全的.对于trade_num_字段,我们可以假设不存在不可打印的ASCII字符0-31.ASCII码也不是127或126(〜).所有其他人可能都在场,包括大写和小写字母,数字和标点符号.这trade_num_将在集合中留下总共94个字符,包括ASCII代码32到125(包括端点).
我正在尝试用C++实现BigInteger类.但是,首先,我有一个基本问题,"基础数据"如何表示?例如,最愚蠢的方法是使用固定(或动态)char数组并在char中存储每个整数的整数.但是,好吧,这是一种非常愚蠢的方式,我在这里是为了你的建议.
所以我最近一直在努力实施Miller-Rabin素性测试.我将它限制在所有32位数字的范围内,因为这是一个非常有趣的项目,我正在做的是熟悉c ++,我不想使用64位的任何东西.一会儿.另外一个好处是该算法对于所有32位数字都是确定性的,因此我可以显着提高效率,因为我确切知道要测试的证人.
因此对于较低的数字,该算法工作得非常好.但是,该过程的一部分依赖于模幂运算,即(num ^ pow)%mod.所以,例如,
3 ^ 2 % 5 =
9 % 5 =
4
Run Code Online (Sandbox Code Playgroud)
这是我用于此模幂运算的代码:
unsigned mod_pow(unsigned num, unsigned pow, unsigned mod)
{
unsigned test;
for(test = 1; pow; pow >>= 1)
{
if (pow & 1)
test = (test * num) % mod;
num = (num * num) % mod;
}
return test;
}
Run Code Online (Sandbox Code Playgroud)
正如您可能已经猜到的那样,当参数都是特别大的数字时会出现问题.例如,如果我想测试数字673109的素数,我将在某一点上必须找到:
(2 ^ 168277)%673109
现在2 ^ 168277是一个特别大的数字,并且在过程的某个地方它溢出测试,这导致不正确的评估.
在反面,诸如的论点
4000111222 ^ 3%1608
由于同样的原因,也评估不正确.
有没有人对模块取幂有一些建议,可以防止这种溢出和/或操纵它产生正确的结果?(我看到它的方式,溢出只是模数的另一种形式,即num%(UINT_MAX + 1))
我正在尝试实施SAFER +算法.该算法需要找到幂函数的模数,如下所示:
pow(45, x) mod 257
Run Code Online (Sandbox Code Playgroud)
变量x是一个字节,因此可以在0到255之间.因此,如果使用32位或64位整数实现,则幂函数的结果可能非常大,从而导致不正确的值.
我该如何进行此计算?
有没有一种算法可以准确地将两个任意长整数相乘?我正在使用的语言限制为64位无符号整数长度(最大整数大小为18446744073709551615).实际上,我希望能够通过分解每个数字,以某种方式使用无符号的64位整数处理它们,然后能够将它们重新组合成一个字符串(这将解决相乘结果的问题)来实现这一点存储).
有任何想法吗?
我正在研究一个因子程序,当试图找到1000的阶乘时,程序不起作用.我认为大整数是解决方案; 它们是如何工作的?(在C或C++中)
整数只有32位,长到64位...所以...当你使用更大的数字时你会怎么做?
另外,在二进制表示和十六进制表示之间切换有多容易?
我试图将大整数值分配给c中的变量,当我打印时,我只得到10123456.
有什么问题?
int main(){
long a = 1234567890123456;
printf("\n",sizeof(a));
printf("%ld",a);
}
Run Code Online (Sandbox Code Playgroud)