我之前错误地认为%运算符返回余数,而mod运算符返回模数(当操作数均为正数或均为负数时,余数和模数相同,但当一个操作数为正而另一个操作数为负时,余数和模数不同。比较 Raket\' s余数和模函数)。
然而,这根本不正确 \xe2\x80\x93 两者%并mod返回模数;都不返回余数。事实上,如果使用相同的参数调用,它mod看起来总是会返回完全相同的值。%据我所知,唯一的区别是%可以使用非整数参数调用,而如果使用ormod以外的任何参数调用则抛出异常。Int:Dint
那么,有什么意义呢mod?使用它是否会带来一些性能提升(也许可以通过节省优化器的一些专业化工作?)或者我缺少一些其他差异?
我是一名计算机科学专业的学生;我正在独立学习算法课程。
\n在课程中,我看到了这样一个问题:
\n\n\n给定一个n位整数N,找到一个多项式(n)时间算法来决定N是否为幂(即,存在整数a和k> 1,使得a^k = N)。
\n
我想到了第一个选项,它是 n 的指数:\n对于所有 k , 1<k<N ,尝试将 N 除以 k 直到得到结果 1。
\n例如,如果 N = 27,我将从 k = 2 开始,因为 2 不能整除 27,我将转到下一个 k =3。\n我将除以 27 / 3 得到 9,然后再次除以直到我将得到 1。这不是一个好的解决方案,因为它是 n 的指数。
\n我的第二个选择是使用模算术,如果 gcd(a, k+1 ) = 1 (欧拉定理),则使用k \xe2\x89\xa1 1 mod (k+1) 。我不知道a和k是否互质。
\n我正在尝试编写一个算法,但我很难做到:
\nfunction power(N)\nInput: Positive integer N\nOutput: yes/no\nPick positive integers a_1, a_2, . . . , a_k < N …Run Code Online (Sandbox Code Playgroud) 最近我对模运算符感到困惑%.
据了解,a % b == a-a/b*b当我们有一个整数a,并b在那里a > b,我们可以通过手,如果这样的计算a和b足够小.
但是,当涉及到处理器计算它的方式时,处理器是否使用与前面提到的相同的方法a-a/b*b?也许只是将分裂翻译成减法或加法,或者是否可能涉及一些转变?
我需要计算a*amod n但是a相当大,当我对它进行平方时会导致溢出.这样做((a % n)*(a % n)) % n行不通,因为(N-1)2可以溢出.这是用C++编写的,我使用的是int 64.
编辑:示例值= 821037907258和n = 800000000000,如果您将其平方,则会溢出.
我正在使用DevCPP,我已经尝试过让大整数库工作无效.
编辑2:不,这些数字没有模式.
我有代表纬度和经度的双打.
我可以使用以下功能轻松地将经度限制在(-180.0,180.0).
double limitLon(double lon)
{
return fmod(lon - 180.0, 360.0) + 180.0;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为一端是独占的,另一端是包容性的.fmod包括0但不包括-360.0.
任何人都可以想到一个优雅的纬度方法吗?
所需间隔为[-90.0,90.0].封闭形式的解决方案是最好的,即没有循环.我认为fmod()可能不是首发,因为现在两端都是包容性的.
编辑:正如所指出的那样,无论如何都不能进入91度纬度.技术上91应该映射到89.0.哦,男孩,这会改变一切.
我做了一个(对我来说)非常复杂的任务,我必须在给定n个段时计算最大可能的序列数.
我发现加泰罗尼亚数字表示这个序列,我让它工作n <= 32.我得到的结果应该计算为1.000.000.007.我遇到的问题是"q"和"p"对于一个很长的int而言变得很大而且我在分割"q"和"p"之前不能只修改1.000.000.007因为我会得到不同的结果.
我的问题是,是否有一种非常有效的方法来解决我的问题,还是我必须考虑以不同的方式存储值?我的限制如下: - 仅限stdio.h/iostream - 仅整数 - n <= 20.000.000 - n> = 2
#include <stdio.h>
long long cat(long long l, long long m, long long n);
int main(){
long long n = 0;
long long val;
scanf("%lld", &n);
val = cat(1, 1, n / 2);
printf("%lld", (val));
return 0;
}
long long cat(long long q, long long p, long long n){
if (n == 0) {
return (q / p) % 1000000007;
}
else {
q …Run Code Online (Sandbox Code Playgroud) 当我运行我的python 3程序时:
exp = 211
p = 199
q = 337
d = (exp ** (-1)) % ((p - 1)*(q - 1))
Run Code Online (Sandbox Code Playgroud)
结果为211 ^( - 1).
但是当我在wolfram alpha中运行计算时,我得到了我期待的结果.
我做了一些测试输出和变量exp,p并且q在程序中是我在wolfram alpha中使用的所有整数值.
我的目标是从(弱)加密的整数中导出私钥.如果我测试我的wolfram alpha结果,我可以正确解密加密的消息.
我是一名电子工程师,并没有发现从纯粹的数学角度考虑CRC非常重要.但是,我有以下问题:
当我们计算CRC时,为什么要在消息中添加n个零,n是生成多项式的次数?我已经在modulo-2 long division以及CRC的硬件实现中看到了这一点
为什么我们希望生成多项式可以被(x + 1)整除?
为什么我们希望生成多项式不能被x整除?
modulo ×10
c ×2
algorithm ×1
android ×1
assembly ×1
biginteger ×1
c++ ×1
checksum ×1
crc ×1
cryptography ×1
division ×1
intervals ×1
java ×1
math ×1
performance ×1
polynomials ×1
python ×1
raku ×1
rakudo ×1
rsa ×1
store ×1
wolframalpha ×1