RE0:从取模开始的AKIOI生活

Posted |Roland|

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RE0:从取模开始的AKIOI生活相关的知识,希望对你有一定的参考价值。

取模

\\(\\%\\)的定义

\\(m=qn+r(0\\le r<q)\\),则记\\(m\\equiv r(mod\\ q)\\),在\\(C++\\)中写作\\(m\\% q=r\\)
举例:
\\(1\\%3=1\\)
\\(5\\%3=2\\)
对负数取模也是一样的。
\\(C++\\)中的负数取模的结果。
\\(-5\\%3=-1\\)
\\(5\\%-3=1\\)
\\(-5\\%-3=-1\\)

\\(\\%\\)的性质

Vigenere 解密和取模

【中文标题】Vigenere 解密和取模【英文标题】:Vigenere decryption and modulo 【发布时间】:2017-03-16 12:52:51 【问题描述】:

我正在查看***上的 Vigenère 加密/解密算法,我想知道哪种方法是最有效/正确的:

return a % b

和:

if a < 0    
    return a += b
else 
    return a

当: -b &lt;= a &lt;= b

或者编译后可能是等价的?

谢谢你赐教:)

【问题讨论】:

【参考方案1】:

IMO,这种纳米优化没什么意义,因为您需要数百万个字符的文本才能有任何可察觉的差异。

与其他操作相比,模运算和条件分支都“昂贵”,并且它们非常依赖于处理器架构。因此,唯一知道的方法是进行基准测试,充分注意在现实条件下获得可重现的结果(这有点矛盾)。

这就是说,请注意 % 不会为负参数实现真正的模运算,如果您假设如此,您将得到错误的结果。

【讨论】:

好吧,反正我不是在寻找优化,因为我知道它只会对我的代码产生很小的影响。但是你所说的% 实现是我所期待的。所以这显然取决于语言。我在 Haskell 中尝试过,% 似乎产生了预期的结果,但我会保留if statement 谢谢:) @MathersMax:或者,(a + c) % b 也可以,其中c 是一个精心挑选的常数。

以上是关于RE0:从取模开始的AKIOI生活的主要内容,如果未能解决你的问题,请参考以下文章

从取球问题到含重复的组合问题模板

Vue移动端项目搭建: 手把手从零开始搭建

Re0:DP学习之路 01背包如何打印路径?

Re0:DP学习之路 母牛的故事 HDU - 2018

当我的数字从 1 开始而不是 0 时,我如何取模?

linux性能优化软中断的理解及问题定位