免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8573 | 回复: 5
打印 上一主题 下一主题

为什么就不能求两个负数的最大公约数呢?请大家看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-21 23:52 |只看该作者 |倒序浏览
请看代码
  1. qsort ::  Ord a=>  [a] -> [a]
  2. qsort [] = []
  3. qsort (x:xs)  = qsort larger ++ [x] ++ qsort smaller
  4.                  where
  5.             smaller =[ a|a <- xs,a<=x]
  6.      larger  = [ a| a <- xs ,a>x]

  7. maxGYS ::   Int -> Int -> Int  --求最大公约数
  8. maxGYS  m n
  9.                      | abs m < abs n              = head [x | x <- qsort [1.. (abs m)],m`mod` x==0, n`mod` x==0]
  10.        | m == n         = abs m
  11.        | abs m > abs n     =head [ x| x <- qsort[1.. (abs n)] , m`mod` x==0, n`mod` x==0]
  12.   
复制代码

当我输入 maxGYS -1 -3 时,winhugs的出错信息是

ERROR - Cannot infer instance
*** Instance   : Num (Int -> Int -> Int)
*** Expression : maxGYS - 1 - 3

论坛徽章:
0
2 [报告]
发表于 2009-03-22 00:37 |只看该作者

  1. *Main> maxGYS (-1) (-2)
  2. 1
  3. *Main> maxGYS (-2) (-6)
  4. 2
  5. *Main>
复制代码

论坛徽章:
0
3 [报告]
发表于 2009-03-22 15:11 |只看该作者
原帖由 win_hate 于 2009-3-22 00:37 发表

*Main> maxGYS (-1) (-2)
1
*Main> maxGYS (-2) (-6)
2
*Main>

谢谢你了,我刚学。

论坛徽章:
0
4 [报告]
发表于 2009-03-27 14:50 |只看该作者
一般数学上不讨论负数的最大公约数。

论坛徽章:
0
5 [报告]
发表于 2009-03-27 14:59 |只看该作者
原帖由 ypyf3000 于 2009-3-27 14:50 发表
一般数学上不讨论负数的最大公约数。


整数环是唯一分解整环,任何两个元素都有相应的最大公因子,算一下也无妨。只不过负数与相应的正数是相伴的,对结果没有影响,所以通常只考虑正数。

[ 本帖最后由 win_hate 于 2009-3-27 15:04 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-05-01 20:19 |只看该作者
Prelude 模块中有这两个函数:

  1. Prelude> lcm 2 4
  2. 4
  3. Prelude> gcd 2 4
  4. 2
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP