全部勾股数

定理:在奇数数列 1+3+5+...+2n-1 中,若φm是一个平方数且φm可以分解成连续φ个奇数之和,
则存在唯一个数x^2,使得 φm + x^2 = (x + φ)^2 , 既一组勾股数。

例如:取φ = 1,m = 3^2, 5^2, 7^2,....
      则 φm = 9, 25, 49,....
      [9] +[1+3+5+7]    = [1+3+5+7+9]  → 3^2 + 4^2 = 5^2
      [25]+[1+3+...+23] = [1+3+...+25] → 5^2 + 12^2 = 13^2 
      [49]+[1+3+...+47] = [1+3+...+49] → 7^2 + 24^2 = 25^2
      ....
又如:取φ = 2,m = 18, φm = [17+19], √(φm) = 6
      [17+19] + [1+3+...+15] = [1+3+...+19] → 6^2 + 8^2 = 10^2
      取φ = 3,m = 27, φm = [25+27+29], √(φm) = 9
      [25+27+29] + [1+3+...+23] = [1+3+...29] → 9^2 + 12^2 = 15^2

证明:左边 = (1+3+5+...+2x-1) + [(2x+1)+(2x+3)+...+(2x + 2φ-1)]
           = ∑[i=1..x](2i-1) + ∑[i=1..φ](2i-1) + 2x*φ
   = x^2 + 2φx + φ^2
   = (x+φ)^2
   = 右边
证完。

 

【code】

编了个小程序检测 φ=3时的勾股数,φm < 1000000

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int i, f = 3, fm, n;
 for (i = 9,fm = 81; fm < 1000000; i+=2,fm=i*i )
 {
 if (!(fm % f)) 
 {
 n = (fm / f - f / 2) / 2;
 printf(" %d^2 + %d^2 = %d^2/n",i,n-1,n+f-1); 
 }
 }
 system("pause");
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值