找回密码
 欢迎注册
楼主: 〇〇

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

[复制链接]
发表于 2011-4-21 15:38:04 | 显示全部楼层
20# G-Spider thank you ,gelivable!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 18:10:32 | 显示全部楼层
14# wayne for(b=1;b*b
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 18:23:27 | 显示全部楼层
本帖最后由 zeroieme 于 2011-4-21 21:46 编辑 更直接的 给出m (m
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 19:46:09 | 显示全部楼层
22# zeroieme 我的算法时间复杂度就是O(N)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 20:27:58 | 显示全部楼层
本帖最后由 zeroieme 于 2011-4-21 20:30 编辑 for(b=1;b*b N $
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 20:31:47 | 显示全部楼层
25# zeroieme ,严格来说是 O(${N}/{2\sqrt{2}}$)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 21:17:30 | 显示全部楼层
这样的话由m导出 $a=2mn$ $b=m^2 - n^2$ $c=m^2 + n^2$ 应当是O($sqrt(N)$) 另外O()是正比于某个增长度,不应当带常数项。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 21:55:16 | 显示全部楼层
错了,不能产生全部衍生勾股数
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-21 22:16:49 | 显示全部楼层
本帖最后由 wayne 于 2011-4-21 22:33 编辑 14# wayne 该代码还可以改进, 循环内部可以少一层if判断,在unsigned long int范围内,速度已经无可挑剔了: 如果想查看所有的勾股数,去掉注释即可, 建议用重定向的方式运行程序,比如 a.exe 1000000>a.txt 将产生75.6M的文件。
  1. #include <stdio.h>
  2. typedef unsigned long int DW;
  3. inline DW gcd(DW m,DW n){DW t; while(m!=0) t=m,m=n%m,n=t;return n;}
  4. DW Test(DW n){
  5. DW t,s,ii,cnt=1,sum=0,c=1;
  6. DW a,b;
  7. for(b=1;b*b<=n/2;b++)
  8. for(a=b+1;t=a*a+b*b,t<=n;a++){
  9. if(gcd(a-b,2*b)==1){
  10. s=n/t;
  11. //for(ii=1;ii<=s;ii++)
  12. //printf("%5u.%-5u\t%u,%u,%u\n",c++,cnt,ii*(a*a-b*b),2*ii*a*b,ii*t);
  13. //cnt++;
  14. sum+=s*(s+1)*a*(a+b);
  15. }
  16. }
  17. return sum;
  18. }
  19. int main(int c ,char **v)
  20. { if (c==2) {
  21. printf("total of triples less than %s :\t%lu\n",v[1],Test(atoi(v[1])));
  22. }
  23. return 0;
  24. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-4-22 00:35:23 | 显示全部楼层
29# wayne 挑根小刺 if(gcd(a-b,2*b)==1) 既然a-b与 2*b互质,那么a、b不能同奇偶 for(a=b+1;t=a*a+b*b,t<=n;a++) 改成 for(a=b+1;t=a*a+b*b,t<=n;a+=2) 是否更快点
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-12-22 10:00 , Processed in 0.024671 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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