sml - 大数的 GCD

标签 sml greatest-common-divisor

我正在尝试创建一个处理非常大数字的 gcd 函数。因此,到目前为止我尝试过的任何事情都会导致错误。例如 :

fun gcd(a : Int.toLarge, b : Int.toLarge): Int.toLarge =
  if   b = 0
  then a
  else gcd(b, a mod b)` 

给我以下错误:
Error:unbound type constructor : toLarge in path Int.toLarge

有人可以给我一些建议,我的程序的其余部分似乎工作正常。先感谢您 !

最佳答案

你对待Int.toLarge好像它是一种类型,但它是一个函数。您要查找的类型是 IntInf.int。无论您输入什么类型的数字,gcd 函数看起来都是一样的;但是您可能必须引用另一个模块中的算术运算符。

这是 Int.int 类型的 gcd 函数:

fun gcd (a, 0) = a
  | gcd (a, b) = gcd (b, a - b*(a div b))

由于 SML/NJ 的算术运算符被重载,这里是 IntInf.int 的一个:
fun gcd (a, 0) = a : IntInf.int
  | gcd (a, b) = gcd (b, a - b*(a div b))

关于sml - 大数的 GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49896300/

相关文章:

function - 如果 x = sml 中的整数,如何编写计算 F(x) 的函数

c - 下面的c代码有什么问题?进入循环后 gcd 停止工作

java - 求n个数的gcd

math - 如何为两个可互换的整数创建唯一键?

sml - Standard ML 中的 eqtype 是什么?

C : Sum of reverse numbers

ocaml - SML 和 OCaml 有什么区别?

python - 使用计数器 python 来自 2 个因式分解列表的 gcd

java - 在数组中查找不重复的最大 GCD 总和

algorithm - 用功能语言了解此多项式除法算法