找回密码
 欢迎注册
查看: 28058|回复: 40

[讨论] 如何求出1-n以内勾股数之和

[复制链接]
发表于 2011-4-19 07:32:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
比如1-10
3+4+5 +6+8+10=36
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 07:58:32 | 显示全部楼层
请问:若 n=7 时,包含“6”吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 09:51:58 | 显示全部楼层
楼主的例子是包含n的
1~10:3+4+5+6+8+10=36
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 10:00:39 | 显示全部楼层
我问的意思是:不完整的“勾股数”组合算吗?比如(6,8,10)中能选前面的一二个。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-4-19 11:03:18 | 显示全部楼层
要完整的
比如1-15
3 4 5
5 12 13
6 8 10
9 12 15
全加起来
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 11:41:22 | 显示全部楼层
勾股数 形如:{a^2+b^2 ,a^2-b^2 ,2ab}
所以问题的实质就是,求所有满足a^2+b^2 <= n 的非平凡的正整数解。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 11:42:59 | 显示全部楼层
关于 半径为根号n的圆内 的整点个数,以及所有的整数点, 我记得在Mathematica里面是有现成的函数的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-4-19 12:47:57 | 显示全部楼层
非平凡的是怎么理解呢
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 12:57:17 | 显示全部楼层
#6,试一下编程:
  1. #include <stdio.h>
  2. #include <math.h>
  3. typedef unsigned int DWORD;
  4. DWORD Test(DWORD n)
  5. {
  6.     DWORD t,sum=0;
  7.     DWORD a,b;
  8.    
  9.     for(b=1;b<(n>>1);b++)
  10.         for(a=b+1;a<=n;a++)
  11.         {
  12.             t=(DWORD)pow((double)a,2.0);
  13.             if((t+(DWORD)pow((double)b,2.0))<=n)
  14.                 sum+=(t+a*b)<<1;
  15.         }        
  16.            
  17.     return sum;
  18. }

  19. int main()
  20. {
  21.         
  22.         printf("%u    %u\n",10,Test(10));
  23.    
  24.     return 0;

  25. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-19 21:53:49 | 显示全部楼层
9# G-Spider
我也写了一个:
  1. #include <stdio.h>
  2. int Test(int n)
  3. {
  4.     int t,sum=0;
  5.     int a,b;
  6.     for(b=1;b*b<n/2.0;b++)
  7.         for(a=b+1;a*a<=n;a++)
  8.         {  t=a*a+b*b;
  9.             if(t<=n)
  10.                printf("%d\t%d\t%d\t\n",a*a-b*b,2*a*b,t), sum+=2*a*(a+b);else break;
  11.         }            
  12.     return sum;
  13. }

  14. int main(int c ,char **v)
  15. {   if (c==2) {printf("total:%s    %d\n",v[1],Test(atoi(v[1]))); }
  16.     return 0;
  17. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-17 03:56 , Processed in 0.045023 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表