首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

刘徽《九章算术》中的勾股数

打印文章

分享到:
若A、B、C为满足A2+B2=C2的正整数。我国古代数学书《周髀算经》曾经提到“勾广三,股修四,径偶五”这三个边都是正整数的直角三角形。在公元263年时,我国数学家:刘徽写了一本数学书,书名叫作《九章算术》,其中有

32+42=52

52+122=132

72+242=252

82+152=172

    202+212=292

   由此看来我国古代数学家已经研究出很多组勾股数。

(一)  见程序设计思路笔算从略

  请你编写程序,求出100之内的所有组勾股数,并打印全部结果。

(二)  程序设计

设计思路

由不定方程:A2+B2=C2      (1)

  有定理:不定方程(1)的适合条件

     A>0,  B>0,   C>0,    (A,B)=1,2 | A

的一切正整数解,可用下列公式表示出来:

     A=2XY,    B=X2-Y2,    C=X2+Y2

    这里的X和Y都是正整数,而且X>Y (X、Y)=1,2|(X+Y)

    如果按照此定理编写出源程序当然是可以的。但对不了解此定理的读者这样编写就比较困难。所以这里使用一般的方法。首先设法得到从3到100之间的数的两组合。利用二重循环可以达到这一目的。令外循环变量为A,A从1到99。令内循环的循环变量为B,B从A+1到100。然后在循环体内判断A和B是否满足等式(1)。

    将满足等式的A和B及C打印出来。为了缩短机器运算时间,我们可以利用勾股数的奇偶特性。即在A和B中一个是奇数,另一个必定是偶数。那么可以让B从A+1开始,每次增加步长为2。因为A若是奇数,A+1就是偶数。以后步长是2,B总是为偶数。如果A是偶数,A+1就是奇数。以后步长是2,B总为奇数。我们用整形变量I、J、L分别代表A、B、C

FORTRON源程序:

    WRITE(*,30)

    DO 10 I=3,99

      K=I+1

      DO 10 J=K,100,2

        S=I*I+J*J

        S=SQRT(S)

    L=S

    IF(L.GT.100.OR.ABS(S-L).GT.0.1E-06) GOTO 10

        WRITE(*,20)I,J,L

10 CONTINUE

20  FORMAT(2IX,3I5)

30  FORMAT(25X,’A          B           C ‘/20X,’--------------------’)

    END



BASIC源程序

10 PRINT "A              B               C"

20 PRINT "--------------------------------"

30 FOR I = 3 TO 99

40   K = I + 1

45   FOR J = K TO 100

50     S = I * I + J * J

60     S = SQR(S)

70     L = INT(S)

80     IF L >= 100 OR L <> S THEN 100

90     PRINT I, J, L

100           NEXT J

110   NEXT I

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章