用于大数字的 GCD



我正在尝试创建一个处理非常大的数字的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))

最新更新