modular-arithmetic相关内容
我想使用 NTT 进行快速平方(请参阅快速 bignum 平方计算),但即使对于非常大的数字……超过 12000 位. 所以我的问题是: 有没有办法优化我的 NTT 转换?我并不是要通过并行(线程)来加速它;这只是低级层. 有没有办法加快我的模块化算术的速度? 这是我在 C++ 中为 NTT 编写的(已经优化的)源代码(它是完整的并且 100% 在 C++ 中工作,不需要第三方
..
到目前为止我所做的就是这些我正在尝试以更短的时间优化代码.但它不起作用. for _ in range(int(input())):n, m = map(int, input().split())计数 = 0对于范围内的 i (1, n+1):对于范围内的 j (1, n+1):如果我<j 我尝试的另一种方法: if i 两个条件都给出了正确的结果.但显示超出时间限制 我该怎么办
..
在我的 c 代码中,我必须执行一系列递归模块化操作.特别是我必须执行像 (A*B)modC 这样的操作,C~2^126 和 A,B,原则上,可能是非常大的数字(从 0 到 2^128 - 1)(我与128 位 unsigned __int128 变量). 问题是如何在乘法过程中执行模块.我需要这个,因为如果在乘法之后执行模块,我可能会在乘法期间超过 2^128(如果 A 和 B 非常大)并破坏连
..
我正在尝试为RSA加密系统编写解密功能,对于非常很小的数字,一切似乎都工作正常,但是有时输出不正确(我认为原因是可能是浮点错误或某种堆栈溢出. 导致我出现问题的过程可以简化为(11 ^ 23)mod 187,但是如果有人希望看到它,我将提供完整的代码.我知道答案应该是88,因为这是西蒙·辛格(Simon Singh)博士在“密码本"附录J中使用的示例(我也使用Wolfram Alpha进行了
..
使用函数 getNextIdx ,我想为数组接收一个新索引,该索引取决于当前索引和该索引处的数组的值. 我希望函数通过将当前索引与该索引处的数组值相加,以数组的大小为模,来返回新索引. #include使用命名空间std;int getNextIdx(int currentIdx,vector数组){int jump =数组[currentIdx];int n
..
我正在尝试对大值(最多64位)执行模幂运算,并为此编写了以下函数: uint64_t模块Exp(uint64_t num,uint64_t exp,uint64_t mod){字符串expBits = bitset 64(exp).to_string();expBits = expBits.substr(expBits.find("1")+ 1);字符串操作=“";uint64_t resul
..
我对应该如何绕过 radix- 2蒙哥马利模数乘法,用于模幂运算.以下两篇论文提出了绕开减法运算的条件. 没有最终结论的蒙哥马利指数 减法:改进结果 蒙哥马利乘法不需要最终 减法 我不完全了解“预处理和后处理"的要求,以消除在蒙哥马利乘法结束时重复减去模数的需求. 在阅读了以上论文后,我的理解是,要消除最终的减法,您必须: 将每个输入操作数零扩展为两个模幂 e.g.
..
最近我知道mod('%')运算符非常慢.所以我做了一个可以像%b一样工作的函数.但是它比mod运算符更快吗? 这是我的职能 int mod(int a, int b) { int tmp = a/b; return a - (b*tmp); } 解决方案 根据钱德勒·卡鲁斯(Chandler Carruth)在CppCon 2015上的基准测试,最快的模运算符(在
..
def f(a, b, c): return ((a ** b)-1) // c % b 此脚本可以某种方式更快吗? (我一直在寻找具有模幂的东西): pow(a, b, c) == a ** b % c ,但是上面的脚本似乎不是那样完善的.有谁知道一种加快上述脚本速度的方法?预先感谢. 编辑: 第二个脚本与第一个脚本完全不同,它只是用来说明我所考虑的优化类型.
..
我正在尝试计算如下内容:a ^ b mod c,其中所有三个数字都很大。 我尝试过的事情: Python的pow()函数需要花费数小时,但尚未产生结果。 (如果有人可以告诉我它是如何实现的,将非常有帮助!) 我实现的从右到左的二进制方法,用O(log e)时间,大约需要30到40个小时(不想等待那么长时间)。 各种递归方法都会产生细分错误(在我更改了递归限制) 我可以
..
我一直在研究大量模数维基百科的链接,这是伪代码。 functionmodule_pow(基,指数,模) 结果:= 1 而指数> 0 if(指数mod 2 == 1): 结果:=(结果*基数)mod模量 指数:=指数> 1 base =(base * base)mod模数 返回结果 I不理解wiki中给出的解释。为什么我必须检查exp%2是偶数还是奇数。还有为什么
..
对于我的项目,我需要在给定矩阵Y和K的情况下求解矩阵X.(XY = K)每个矩阵的元素必须是对256位随机质数求模的整数.解决这个问题的第一个尝试是使用SymPy的mod_inv(n)函数.问题是我的矩阵大小为30的内存用完了.我的下一个想法是执行矩阵分解,因为这样可能减轻了内存的负担.但是,SymPy似乎不包含能够找到以模为模的矩阵的求解器.我可以使用任何解决方法或自制代码吗? 解决方案
..
我想知道如何计算x ^ y mod z. x和y非常大(无法容纳64位整数),而z将容纳64位整数. 一件事不给出答案,例如x ^ y mod z与(x mod z)^ y mod z相同. 解决方案 以下是标准方法,采用伪代码: function powerMod(b, e, m) x := 1 while e > 0 if e % 2 == 1
..
我了解残数系统的概念和混合基数系统,但是我很难获得在简单的案例研究中可以使用的任何转换方法 我从Knuth的计算机编程艺术开始,但是在转换理论上有点过分了,一旦提到Euler,我就迷路了.维基百科对此主题有不错的部分,我尝试了我在此处(PDF),我在此处浓缩了相关部分,但我不理解乘法逆和它们的表示法.具体来说,y_2 = |(3-19)|(1/31)| _7 | _7 = | 5 * 5 |
..
如何计算(a ^ b) % c,其中0
..
我已经在JavaScript中实现了一个ElGamal方案(代码很糟糕,只是想快速测试它)基于这个解释。 var forge = require('node-forge'); var bigInt = require(“大整数”); var bits = 160; forge.prime.generateProbablePrime(bits,function(err,num
..
在JavaScript中,我有两个包含十六进制数字的变量作为字符串,每个都是。例如: var a ='a3bc', b''1d0f'; 现在我想添加它们(所以结果应该是'c0cb “)。为了让事情变得更容易一些,让我们对此加以一些限制: 数字总是由相同的数字组成(即,这些字符串的长度是相同的。) 如果需要,这些数字前缀为 0 s,所以它会是'001a
..
我试图在这种情况下创建一个模运算操作: x * y mod n 至于我读的最快的方法是使用蒙哥马利乘法,但我不能理解 有人能够做到这一点,或者有任何图书馆可以使用它吗? 解决方案 可以找到基本的移位和添加模乘法此处作为此开放核心项目。 这里是另一个使用蒙哥马利乘法的项目。
..
我试图在椭圆曲线上添加两个点在素材场上,从仿射/仿射坐标转换这些点,但不能得到正确的结果(我测试的曲线有a = 0)。 // From Affine BigInteger X1 = P.x; BigInteger Y1 = P.y; BigInteger Z1 = BigInteger.ONE; BigInteger X2 = Q.x; BigInteger Y2
..
这也是一个数学相关的问题,但我想在C ++中实现...所以,我有一个数字形式 2 ^ n 并且我必须计算其数字的总和(以10为底; P)。我的想法是用以下公式计算它: sum =(2 ^ n mod 10)+(floor n / 10)mod 10)+(floor(2 ^ n / 100)mod 10)+ ... 其所有数字: floor(n / floor(log2(1
..