c++ - 检查 n 值的倍数作为模同余

标签 c++ cryptography

现在我想检查一下是否值

int a = pow(9.0,100);
int b = 81;
int c = 547;

当我使用a - b时,该值应该可以除以c而没有余数;

if( (a-b) % 547 == 0 )
     cout << "Correct" << endl;
else
     cout << "Wrong" << endl;

但输出总是出错,我看到了网站链接。答案应该是正确的。 链接可以引用这里的线程:How to calculate modulus of large numbers?

但是我的一个当做同余模时它涉及减号。所以不知道怎么写算法

最佳答案

9^100 大约是 10^95,所以它溢出了 int。你可以用普通的 int 来计算它,而不是计算 10^95 然后取模:

int c=1;
for(int i=0; i<100; ++i) 
    c = (c * 9) % 547;

所以c值总是在547以下。你也可以用二元幂法加速。

对于您的第二个问题 - 计算负值模值的最简单方法是使用以下代码执行此操作:

int mod(int a, int n) {
    int res = a % n;
    if (res < 0) res = res + n;
    return res;
}

关于c++ - 检查 n 值的倍数作为模同余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928821/

相关文章:

c++ - 阻止 Win32 应用程序的所有 Windows Internet 访问

c++ - 使用 C++ Code::Blocks 将文本文件中的单独部分读入 vector

javascript - 是否有 AES 的任何客户端 Javascript/JQuery 实现?

java - 我如何压缩或编码椭圆曲线公钥并将其放在网络上?

security - 盐应该有多长才能使尝试字典攻击变得不可行?

c# - RijndaelManaged:第四代?

当有 2 个指针指向相同的内存位置时,C++ 删除一个指针

c++ - 用 C++ 写一个 MIDI 文件

c++ - extern 在 C++ 中的静态函数

python - session 管理的 Itdangerous 存在安全问题吗?