GCD为大数

时间:2018-04-18 09:39:48

标签: sml greatest-common-divisor

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

protected void Btn_Delete_Click(object sender, EventArgs e)
    {
         string strName=((LinkButton)sender).CommandArgument.Split(',')[0];
         string strDescription=((LinkButton)sender).CommandArgument.Split(',')[1];
    }

protected void btnEdit_Click_Click(object sender, EventArgs e)
    {
         string strName=((LinkButton)sender).CommandArgument.Split(',')[0];
         string strDescription=((LinkButton)sender).CommandArgument.Split(',')[1];
    }

给了我以下错误:

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

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

1 个答案:

答案 0 :(得分:5)

您将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))