关于三角行数和正方形数的注记及算法构造

2021-12-24 07:13赵美利唐静
电脑知识与技术 2021年29期

赵美利 唐静

摘要:三角形数是否能化为正方形数是一个有趣的数学问题,没有形成一定的结论,该文结合数列性质和佩尔方程,讨论三角形数可化为正方形数,为研究三角形数和正方形数提供一定的参考价值,并利用了Java语言的大整数特征结合 Eclipse集成开发环境,验证了其结论的正确性。

关键词:三角形数;正方形数;佩尔方程;大整数

中图分类号:TP393  文献标识码:A

文章编号:1009-3044(2021)29-0171-03

Note and Algorithm Construction of Triangular Row Number and Square Number

ZHAO Mei-li, TANG Jing

(Chuzhou City Vocational College, Chuzhou 239000, China)

Abstract: Triangle number whether can into the square number is an interesting mathematical problems, not form a certain conclu⁃sion, based on the sequence of the nature and pell equation, The necessary and sufficient conditions for the triangle number to be transformed into a square number are discussed, Let the positive integer ofan the nrow of the triangle number be,thean from smallto large, constitute ana series sequence is infinite, has a recurrence formulaan +2 =6an +1 - an +2,a1= 1,a2= 8 The general formula isan =  [(3+ 2)n +(3- 2)n]- ; The number of triangles can be changed into the number of squares, which pro⁃

vides some reference value for the study of the number of triangles and the number of squares. The correctness of the conclusion is verified by using the feature of large integer ofJAVA language and Eclipse integrated development environment.

Key words: triangle number; square number; pell equation; large integer

众所周知, 三角形数和正方形数是数学中一类有趣的问题,我们熟悉的古希腊数学家毕达哥斯拉提到过三角形数和正方形数[1],他们把数看作点集或点状物体,把数字和图形联系在一起,将正整数和正方形、正五边形、三角形等联系起来,将数字划分为正方形数、五边形数、三角形数等,使得数字更加形象生动,研究规律很方便。之后很多人对此问题进行了讨论和研究,得出了一些特殊的三角形数和正方形数,所有大于3的三角形数都是合数,所有三角形数的倒数之和是2,任何一个完全平方数都可以表示成相邻的两个三角形数之和[2]。郑玉美[3]利用余弦定理从1200三角形数方面得出了两个性质,张爱静[4]从三角形数和数三角形角度讨论了三角形的一些规律,得出了数与规则图形的一些结论。黄祎[5]利用初等方法和解析方法,首次提出了三角形数和数列的关系,研究Smarandache三角形数的下部及上部数列的几何平均值的极限问题。智婕[6]在佩尔方程x2-py2=1的求解技巧一文中把佩尔方程和三角形数建立了联系,利用佩尔方程的解的规律得到了满足一定条件的特殊的三角形数。余熙国[7]得出关于三角形数和正方形数的一个结论,一个正整数既是三角形数也是正方形数有无限多个,可以用通式表示:

通式给出了三角形数和正方形数的关系,但是没有给出两者相互转化的结论。近年来很多中学都注重培养学生思维能力和创新能力,在数学学科竞赛题中经常出现三角形数的考题,吴家华[8]将一个数列的各项重新排列,构造三角形数阵,妙解一类数列问题,提出了三角形数的应用问题,开辟了新的领域。综上所述,对于这个有趣数学问题有了一定的研究和探讨,形成了一定的结论,但是对于三角形数和正方形数的转化問题没有涉及,为了更进一步探讨两者的本质联系,本文对满足一定条件的三角形数如何转化成正方形数进行了研究,形成了一定的结论。

1预备知识

三角形数:将物品以三角形形式等距离排列,可以形成等边三角形,这样得到的物品的数,比如1,3,6,10,15,21,...,这样的数称为三角形数。

正方形数:正方形数也称平方数,将一定数量的点或圆等距离排列成正方形,这样得到一组数,比如1,4,9,16,...,这样的数称为正方形数。

佩尔方程:形如x2- dy2= 1(x,y∈ Z+; d不是平方数)方程称为佩尔方程,其满足方程的正整数解是初等数论经典问题之一。

2相关结论

自从三角形数作为一类特殊的数,有一定的规律之后,人们开始一系列探讨和研究,比如三角形数的第n个数是,所有的三角形数的倒数之和等于2,任何两个相邻的三角形数之和都是一个正方形数等等。三角形数是否化为正方形数,是一古老有趣的数学问题,也是初等数论的经典问题之一,在不少书刊和中学生数学竞赛中出现,但未见一个的结论。笔者经研究发现,若三角形数可化为正方形数,其满足一定条件即可,从而完美解决了这一古老有趣的数学问题,下面我们给出一定的结论。

引理1:设 an 为三角形数的第 n 行的正整数,构成新的数列为{an},

综上所述引理1得证。

我们经过数列的性质进一步推导后就会发现,对引理1 的数列各项进行求和,会有更一般的结论,下面给出这个结论,并给出证明。

由(3)式容易得到:

综上所述引理2成立。

由以上两个引理我们得到三角形数转化成正方形数的充要条件,下面我们给出结论,并利用佩尔方程简单证明这个结论是正确的,从而解决了三角形数和正方形数互相转化的这一初等数论的经典问题。

定理:如三角形数可化为正方形数,三角形数第n行的正整数为an,则an +2 =6an +1 - an +2,a1= 1,a2= 8。

证明:∵三角形数可化为正方形数,第n行的正整数为an,由引理2知:

∴存在相对应的正整数m n,使得:

由佩尔方程的概念易知(4)式符合佩尔方程形式。

由佩尔方程的通解知(4)式的通解为:

定理得证。

由引理1和引理2知定理结论是正确的。

此定理给出了三角形数和正方形数转化的充要条件,彻底解决了两者之间的联系问题,以前只是片面的讨论三角形数和正方形数的规律问题,形成了一定的结果。所以研究此问题很有必要,有一定的理论指导意义。此定理是对原来三角形数判定定理的延拓,更具有一般性和使用的广泛性。为进一步证明其结果的准确性,利用java 中大整数的特点设计相应的算法。

3算法实现

程序设计语言基本数据类型中long类型所能表示的整数范围是最大的,但还是有限的。当数据值超出范围会有异常出现,而Java 中专门提供了用来进行不限制大小的整数计算的类——java.math.BigInteger。支持任意精度的整数,可以准确地表示任何大小的整数值,而不会丢失任何信息[9]。在该类中封装了大整数相加add();相减subtract();相乘multiply();相除取整di⁃ vide();取余remainder();求幂pow(); a.pow(b)=a^b;最大公约数gcd ();绝对值abs();是否相等boolean equals();通过使用这些大整数运算,可以求解许多高精度运算问题。在本算法中需要验证通过公式所得数列中的每个数是否完全平方数(正方

形数)和对完全平方数取得其平方根,在java.math.BigInteger类沒有这两种方法,需要自己设计。以下两种算法就是完全平方数和取得其放平方根的设计。

(1)//public static BigIntegermyBigNumSqrt(BigInteger xx){}方法是对大整数求平方根

public static BigIntegermyBigNumSqrt(BigInteger xx){

BigDecimal x=new BigDecimal(xx);

BigDecimal n1=BigDecimal.ONE;

BigDecimalans=BigDecimal.ZERO;

while((n1. multiply(n1). subtract(x)). abs(). compareTo(BigDeci⁃mal.valueOf(0.001))==1)

{

BigDecimal  s1=x.  divide(n1,  2000,  BigDecimal. ROUND_HALF_UP);

BigDecimal s2=n1.add(s1);

n1=s2. divide(BigDecimal. valueOf(2), 2000, BigDecimal. ROUND_HALF_UP);

}

ans=n1;

BigInteger rt =new BigInteger(ans.toString().split("\\.")[0]); return rt;

}

(2)//public static BigIntegeris_square(BigInteger F7){}方法是判断大整数是否完全平方数

public static booleanis_square(BigInteger F7){

//牛顿法求解平方根, 求解a 的平方根 x为a 的平方根,x 的初始值为1,//按x =(x+a/x)/2迭代,误差为error

BigDecimal x = BigDecimal.ONE;

BigDecimal m = new BigDecimal(F7.toString()); BigDecimal eps = new BigDecimal("1");

final BigDecimal error = new BigDecimal("1E-10"); int scale =100;

while(eps.compareTo(error)==1){// eps > error

x  =  x.  add(m.  divide(x,  scale,  BigDecimal. ROUND_HALF_UP)). divide(new BigDecimal("2.0"), scale, Big⁃Decimal.ROUND_HALF_UP);

eps = x.multiply(x).subtract(m).abs();

}

BigInteger sqrt = x.toBigInteger();//求平方根的整数部分 if(sqrt.pow(2).compareTo(F7)==0)

return true;

else

return false;

}}

(3)该算法中要进一步验证数列数列的个数与

该数列中完全平方数的个数是否相等,如相等就证明上述的充分必要条件,在主方法中通过for循环和方法条用的到相应的结果该算法利用数组长度为102最终实现的结果如下求数列an 的值:

在Eclipse开发环境下该程序运行的结果界面如下:

三角形数和正方形数的判定问题是初等数论讨论的经典问题之一,本文章讨论了三角形数和正方形数的转化的重要条件,对于他们的求解问题一直是近年来竞赛题的首选问题,对培养学生的创新思维能力有一定积极意义,在此基础上用Java 语言中大整数的特点和大数据分析方法对三角形数和正方形数以及正多边形数进行分析和编写语言程序,對于这种算法的实现也是永无止境的课题。当然三角形数和正方形数的判定条件还可以进一步优化,需要感兴趣的我们一起去研究和发现,相信会有更好的结果。

参考文献:

[1]华罗庚.数论导引[M].北京:科学出版社,1957.

[2]张文鹏,李海龙. 初等数论[M].西安:陕西师范大学出版社,2013.

[3] 郑玉美.120°三角形数的两个性质[J].中学数学,1992(2):31-32.

[4] 张爱静 . 数三角形与三角形数[J]. 数学学习与研究,2010(3):104.

[5] 黄炜.关于Smarandache三角形数的下部及上部数列[J].宝鸡文理学院学报(自然科学版),2011,31(1):23-25.

[6] 智婕.佩尔方程x2-py21的求解技巧[J].佳木斯大学学报(自然科学版),2011,29(1):110-111.

[7] 余熙国.关于三角形数和正方形数的一个结论[J].数学通报,2012,51(4):55.

[8] 吴家华.构造三角形数阵妙解一类数列问题[J].高中数学教与学,2020(1):18-19.

[9] 申时全.基于Java BigInteger类的大整数运算应用[J].价值工程,2014,33(24):229-231.

【通联编辑:代影】