java - Pollard rho 整数分解

标签 java c++ c math factorization

我正在尝试在 C/C++ 中实现 Pollard Rho 整数分解。Google 为我提供了问题的 Java 实现 here .

我不太了解 Java,所以我想出了什么 this .我在 C++ 中的实现适用于大多数情况,但在少数情况下却不行,比如我在那里使用的“9999”。

我知道 C++ 没有 Biginteger 类,所以我无法拥有它在 JAVA 中提供的全部功能,但我想分解足以满足 unsigned long long

请指出我的实现有什么问题。

最佳答案

问题就在这里:

#define abs(x) (x>0)?(x):(-x)

您的 abs 中缺少一些括号宏。尝试:

#define abs(x) ((x)>0 ? (x) : -(x))

相反。 (考虑在 abs(x-xx) 的情况下扩展 x-xx <= 0 会发生什么。)

此外,为什么您的 gcd 函数返回一个 int 而不是 BigInteger?

您还应注意(假设 unsigned long long 是 64 位整数类型)此代码对于 N 将无法正常工作。大于 2**32 : 如果 x (或 xx )大于或等于 2**32然后 x*x将换模 2**64 , 为您提供错误的 x*x % N 值.

关于java - Pollard rho 整数分解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2305652/

相关文章:

Java 和 Selenium - 按文本选择列表中的单选按钮

java - 如何在 play-framework 中使用 json 数据重定向到另一个 Action

c++ - 混合来自不同编译器的 C++ 代码

c++ - 更简洁的模板化私有(private)静态常量成员变量特化

c++ - 在 C++ 中捕获 SIGINT 并调用析构函数的程序结构

c - 简单的 shell linux C 实现,使用 freopen 重定向 stdout

java - 如何降低环复杂度?

c - avrdude : can't handle ELF file checkio. 十六进制,ELF 文件支持未编译

c - Realloc 和 SIGABRT

java - Google map 集成中出现空指针异常