刘徽《九章算术》中的勾股数
【打印文章】
若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
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 )
【编程爱好者论坛】