c语言使用循环编写勾股数,刘徽《九章算术》中的勾股数

若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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值