找回密码
 欢迎注册
楼主: 无心人

[原创] 整点直角三角形

[复制链接]
发表于 2010-6-10 16:12:52 | 显示全部楼层
截图01.png
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-10 16:18:10 | 显示全部楼层
Prelude> let p3 n = [((0, 0), (x1, y1), (x2, y2))|(x1, y1)<- pn n, (x2, y2)<-p n
, (x1, y1)/=(x2, y2), x2^2 + y2^2 + (x1-x2)^2 + (y1-y2)^2 == n^2, x2>=y2]
强约束下5果然就2组解
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-10 16:20:04 | 显示全部楼层
Prelude> let a = [(x, y)| x<- [2..100], let y = length (p3 x)]
Prelude> a
[(2,1),(3,0),(4,1),(5,2),(6,1),(7,0),(8,1),(9,0),(10,6),(11,0),(12,1),(13,2),(14
,1),(15,2),(16,1),(17,3),(18,1),(19,0),(20,6),(21,0),(22,1),(23,0),(24,1),(25,7)
,(26,6),(27,0),(28,1),(29,3),(30,6),(31,0),(32,1),(33,0),(34,6),(35,2),(36,1),(3
7,3),(38,1),(39,2),(40,6),(41,2),(42,1),(43,0),(44,1),(45,2),(46,1),(47,0),(48,1
),(49,0),(50,15),(51,3),(52,6),(53,3),(54,1),(55,2),(56,1),(57,0),(58,6),(59,0),
(60,6),(61,2),(62,1),(63,0),(64,1),(65,21),(66,1),(67,0),(68,6),(69,0),(70,6),(7
1,0),(72,1),(73,3),(74,6),(75,7),(76,1),(77,0),(78,6),(79,0),(80,6),(81,0),(82,6
),(83,0),(84,1),(85,20),(86,1),(87,3),(88,1),(89,2),(90,6),(91,2),(92,1),(93,0),
(94,1),(95,2),(96,1),(97,2),(98,1),(99,0),(100,15)]
对应解个数如上
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-10 16:23:39 | 显示全部楼层
不对。上面想法不对,等我重新考虑下吧
但是可以确定10以内,2,4,6,8确实是只有1组解的,5本质上有2组,如果不考虑变换,有3组
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-10 16:25:23 | 显示全部楼层
修改约束如下
一个原点O
一个点A(x1, y1),处于(0, 0) - (n, n)直线的下方,X轴以上,即要求x1 >= y1
一个点B(x2, y2),处于直线OA上方,即 y2 / x2 > y1 / x1
且,要求B在OA的中垂线右边(该条待验证)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-10 17:56:25 | 显示全部楼层
rInt :: String -> IO Int
  rInt = readIO

  above (x1, y1) (x2, y2) | (x1 == 0) && (x2 == 0) = y2 > y1
                          | (x1 == 0) && (x2 /= 0) = y2 > 0
                          | (x1 /= 0) && (x2 == 0) = y2 > 0
                          | (x1 /= 0) && (x2 /= 0) = y2 * x1 > y1 * x2


  p n = [(x, y)|x<-[0..n], y<- [0..n], (x/=0)||(y/=0)]

  pn n =filter (\(x, y) ->(x <= y) && (x^2 + y^2 == n^2)) (p n)
  
  p3 n = [((0, 0), (x1, y1), (x2, y2))|(x1, y1)<- pn n, (x2, y2)<-p n, (x1, y1)/=(x2, y2), x2^2 + y2^2 + (x1-x2)^2 + (y1-y2)^2== n^2, above (x1, y1) (x2, y2)]

  main = do
            print "Input n: "
            s <- getLine
            n <- rInt s
            print \$ p3 n
            print \$ length (p3 n)

暂时就到这个地步吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-6-10 17:59:45 | 显示全部楼层
对应的编译成可执行程序的文件
grid.zip (334.56 KB, 下载次数: 6)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-11 09:03:18 | 显示全部楼层
其实就是将$n^2=X^2+Y^2$的所有非负整数解进行变换
首先,对于任意n,我们可以将其在分解为欧拉素数的乘积,由此可以得出$n^2=X^2+Y^2$的所有解
比如,$30=2*3*5=3(1+i)(1-i)(2+i)(2-i)$
所以$30^2=3^2(1+i)^2(1-i)^2(2+i)^2(2-i)^2$
然后根据上面表达式,我们可以将$30^2$写成两个共轭数的乘积,比如$30^2=(3(1+i)^2(2+i)^2)(3(1-i)^2(2-i)^2)$,通常形式就是$n^2=(X+Yi)(X-Yi)$就可以了

评分

参与人数 1经验 +5 鲜花 +5 收起 理由
wayne + 5 + 5

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-11 15:26:23 | 显示全部楼层
可以给出 解的个数 的一般性的分析吗
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-6-11 15:30:56 | 显示全部楼层
47# 无心人


代码直接复制黏贴到GHCi里面执行出错了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-24 05:20 , Processed in 0.049576 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表