趣味数学——勾股数
2021-08-27王德贵
电脑报 2021年25期
王德贵
勾股定理是大家熟知的,勾股数,就是构成勾股定理的三个数,即一个数的平方是另外两个数的平方和。比如,32+42=52,那么3、4、5就是勾股数。那么在一定范围内,有多少勾股数呢?我们在Scratch、Python和Applnventor_种环境中编程解答这一问题,并着重关注程序在不同环境中的运行效率。
一、原理分析
本例可以考虑3个数,都从1开始用枚举法来解决问题,但这种方法循环次数最多,100以内的勾股数就需要计算1003=106,100万次!根据测算Scratch中运行要至少3分钟,Python运行不到1分钟,Applnventor运行大约需要1分钟,可见,它们各自运行的速度是不一样的。当然这主要是由程序语言决定的,Python运行最快,Scratch最慢。
那么怎样能够减少运算量呢?新的思路是根据天系式a2+b2=C2可知,先确定c的值,那么a和b的值一定小于c,所以循环到等于即可,这样就不用循环到最大值,从而减少运行时间。
二、Scratch编程实现
我们把满足勾股定理的3个数,加入链表,然后显示出来,这个比较好理解。但运行后发现,有重复的项(比如3、4、5和4、3、5),共104项实际应为52项,说明恰好重复2次,那有办法去除重复的项目吗?

我們把每个c值加入链表,然后在下次得到满足条件的值时,就查询一下,这几个值在不在链表里:在,就是重复,不加入链表:不在链表里,那就加入进来!这样就不会有重复的数据了。

这段代码的作用就是去重。如果a.b都包含在链表里,就说明是重复数据,所以就做下标记0:如果a.b都不包含在链表里,就说明没有重复数据,于是就将数据加入链表f去重后,显示正常为52个。……
登录APP查看全文
