写在前面 我们大概老早就知道勾股定理,它大概就长这样: 嗯,的确够简单的。 而且我们清楚地知道它的一个基本应用——知道的两边长,求第三边。这大概初一就学了。 对于不知道勾股定理的童鞋们,不了解没关系,因为这里没有三角形,也不是探讨怎么求第三边,我们只探讨勾股数组。 如果真的看不懂,可以先学习同余、约数、素数的知识。 勾股数组什么事都得从定义开始。来看看百度百科教会我们什么。 定义——勾股数组
嗯,够简单的。不过有些人总是喜欢把它弄得高大尚些,把它叫做“毕达哥拉斯三元组”,其实是一个玩意儿,只是后者听起来更加牛。这不必深究,知道它就是勾股数组即可。而勾股数组也就是把三个数a,b,c(a^2+b^2=c^2)用小括号括起来而已。很简单吧?我们举几个栗子————————————————————————————————
诶,(3,4,5)、(6,8,10)看着好像!emmm 实际上它们的本质都是勾三股四弦五 这样就不好玩了嘛)很明显,如果一个勾股数组中每个数同乘一个正整数,得到的三元组还是一个勾股数组。It's very easy.这里省略证明过程。 所以说,勾股数组有无穷个。这就不好玩了嘛,只要知道一组勾股数组,就可以推出inf个勾股数组。。。 最有意义的勾股数组,就是其他勾股数组×d(d > 1))不能得到的勾股数组。只要找到它们,其他的勾股数组都可以由它们乘某个数表示出来。 因此,我们引入本原勾股数组的概念。不过很遗憾,百度百科词条里没有。 定义——本原勾股数组
插句小广告,这本书对于学习数论还是很不错的,中文译名为《数论概论》。 给出一些本原勾股数组。
它有一些有趣的性质。如果你仔细观察,你可能会发现前两个数似乎总是一奇一偶。。。 这个命题是正确的,来看看如何证明。 当a、b均为偶数时,c必然为偶数,它显然不是一个本原勾股数组,a、b、c有公因数2。 如何找本原勾股数组只要找出本原勾股数组,其它勾股数组都可以求出。如何找呢? 为了便于大家理解,这里写的详细些) 为了方便,我们认为本原勾股数组(a,b,c)中,a为奇数,b为偶数,c为奇数。 a^2+b^2=c^2 我们从这方面考虑。(c+b)与(c-b)不应该存在>1的公约数。 我们知道,任何一个大于1的正整数都可以表示成固定几个素数的积,也就是长这模样—— a^2既然为平方数,那么如果把a^2分解质因数,对于任意ki,都有 前面提过,gcd((c+b),(c-b))=1,所以如果p_1|(c+b),p_1|(c-b)是不可能成立的。 我们暂时抛开繁琐的证明,尝试想象。假设你的手里有一个数a^2。看看能不能把它分解成2个没有公因数的数。 啊,不错,分成的这两个数就是(c+b)与(c-b)。要怎么分呢?我们举个栗子。试试分解10^2? 先分解质因数。 我们选取一些质数给(c+b),剩下的质数全部给(c-b) 值得注意的是,我们仅探讨正整数范围内,分解要满足(c+b)>(c-b),并且都是偶数 嗯,这好像只有一种分法 c-b=2^2,c+b=5^2大家可以自己再选几个数,动手尝试。我们可以发现,c-b如果含有质因数p,c-b肯定也含有因数p^2。c+b也是如此。所以,(c-b)与(c+b)一定是完全平方数。 来吧,冲向胜利! 我们设s^2=c+b,t^2=c-b(s>b) 我们把上面俩式子加一加、减一减——哇! 勾股数组定理QED. 如何找勾股数组我们会找本原勾股数组,自然找出了所有勾股数组。 不过,还有一种神奇的方法,已知c,可以在O(\sqrt c)的时间内求出满足a^2+b^2=c^2的a、b个数。 这里放个链接,里面讲的还是很不错的QAQ(肯定讲的比我好),强烈建议童鞋们去Have a look。 前置知识高斯整数
费马平方和定理
由于费马平方和定理证明比较复杂,我找到的一些简单的证明都是片面或错误的,完全的证明似乎要分5步,请自行了解,这里不仔细讲。 a^2+b^2=c^2,或者更广泛地,a^2+b^2=c(a、b、c都为整数(不一定是正的))(这里我们选后者为例)可以转换为在平面直角坐标系中,一个以O为圆心、以根号c为圆心的圆经过几个格点。(这里为了更方便,a、b、c都为整数,不一定要正整数,可以是0、负整数)。 我们把圆放在复数平面中(x轴为实数轴,y轴为虚数轴)。 然后就有惊喜。注意:以下叙述都是在复数平面中,不再是平面直角坐标系) 我们举个例子——c=25 在上面那个链接视频中提到XX的模,我的理解为XX与原点的距离) 很明显,以 \sqrt c为半径的圆经过的格点有(0+5i),(3+4i),(4+3i),(5+0i),(4-3i),(3-4i),(0-5i),(-3-4i),(-4-3i),(-5+0i),(-4+3i),(-3+4i)共12个。(3+4i),(3-4i)这类关于实数轴对称的点互为“复共轨”。(3+4i)的模是5,设它与实数轴呈\alpha,(3-4i)的模也是5,它与实数轴呈-\alpha,很明显,它们相乘得到的结果与实数轴呈\alpha - \alpha=0度,而(3+4i)(3-4i)的模(其实和数值是一样的)为25,也就是c。很明显,像这样格点(也就是(a+bi)(a-bi)=c)都是在圆上的。这样,问题就转换为多少个高斯整数与其复共轨之积为c。 怎么解决呢?这就用到前置知识中的费马平方和定理,不熟悉的童鞋可以再去看看。 我们把不能再分解的高斯整数称为“高斯素数”。事实上,高斯素数有3种:
根据费马平方和定理,一个4k+1型的素数可以分解成(a+bi)(a-bi),很明显,这两个素数互为复共轨。 如果一个数质因子中只有4k+1型的素数,像我们举例的25,那就好办了。 像这样,将它分解成若干高斯素数的乘积(很明显,这是唯一的),并将互为复共轨的一对高斯素数写两边,左边所有高斯素数的乘积与右边的乘积互为复共轨。要使左右乘积继续保持互为复共轨,只能交换一对互为复共轨的高斯素数的位置(这个不难理解)。我们可以这样考虑,对于相同的高斯素数(我指的是成对的),(就比如(1+2i)),它在左边可以放0个,放1个,放2个……当然,不是你想放就随便放的,把1个放到左边的同时,要把它的复共轨移一个到右边,以保持左右乘积仍互为复共轨。这样,如果总共有p个,就有(p+1)种放法。然后继续处理下一个高斯素数(当然,处理过一个高斯素数,不必再处理它的复共轨)。最后,为了避免重复,我们只取左边的乘积作为结果。然鹅,事情并非这么简单。如果你这么算,25得到的结果为(2+1)=3。才这么点?事实上,如果你在左、右分别乘上-1与-1、i与-i、-i与i,得到的结果是不同的,而且很显然,它们都是对的。但是它们的本质是相同的。就好比3×4=12,(-3)×(-4)=12一样。所以,最后的结果要乘4。 4k+3型的素数已经是高斯素数,而且它的复共轨就是本身,因此,只能将它平均分配给左边和右边。如果某个这种素数有奇数个,不能平均分配给左右,那很遗憾,一个解也没有。 对于素数2,它能分解成两个高斯素数(1-i)(1+i),但是,你会发现,-i×(1-i)=(1+i),如果将(1-i)与(1+i)互换位置,就相当于一个乘-i,另一个乘i,它们的本质还是没有变,所以,素数2不影响结果。 来看看[HAOI2008]圆上的整点,因为这题中半径r为正整数,所以r^2所含的4k+3都是成对出现的,也就是说如果c^2\%p=0,那么c^2\%p^2=0,所以直接忽略2与4k+3型素数。如何处理4k+1的素数,请参照上文。(找质因数不必讲了吧 #include<bits/stdc++.h> 一些其他性质这里还是假设本原勾股数组(a,b,c)中,a为奇数。
这个证明思路与上面十分相似。只要把a^2移到右边instead of b^2 即可。 Very easy. 给个开头,请自行证明。当然,这也能在所有勾股数组中适用)
还有两条不常用的性质,了解即可。
关于费马大定理费马在某本书的边沿上写道。
也就是说,a^n+b^n=c^n(n>2)没有正整数解。这就是赫赫有名的费马大定理。 W( ̄_ ̄)W。。。这是一个世纪难题,1986年才被解决。。。大家了解即可,了解即可,如果您证出来了,我只能膜拜大仙。如果真的碰到类似于这样的式子,直接拿出来用就可以了,不要傻fufu地去证明。 最后的补充这里再增加一些知识点。这里,我们通过其他方法推出勾股数组定理。 这样就转换为如何找出x^2+y^2=1的所有有理数解 我们以(0,0)为圆心,r=1为半径画圆。 很明显,点(1,0)是一个解。我们过点(1,0)作直线y=mx-m 当然,如果选取(-1, 0)也是可以的,这样求出来的答案有点不一样。 十分神奇,right?
|
|