wayne 发表于 2011-4-22 07:01:37

30# zeroieme
这个改得好,
因为a-b是奇数,所以a取 b+1,b+3,b+5,........
:b:
仔细想了一下,如果a取步长2的话,那么if语句里面的其实就可以用gcd(a,b)==1 了#include <stdio.h>
typedef unsigned long int DW;
inline DW gcd(DW m,DW n){DW t;while(m!=0) t=m,m=n%m,n=t;return n;}
DW Test(DW n){
    DW t,s,ii,cnt=1,sum=0,c=1;
    DW a,b;
    for(b=1;b*b<=n/2;b++)
      for(a=b+1;t=a*a+b*b,t<=n;a+=2){
                        if(gcd(a,b)==1){
                                s=n/t;       
                                // for(ii=1;ii<=s;ii++)
                                // printf("%5u.%-5u\t%u,%u,%u\n",c++,cnt,ii*(a*a-b*b),2*ii*a*b,ii*t);
                                // cnt++;
                                sum+=s*(s+1)*a*(a+b);
                          }
                }      
    return sum;
}

int main(int c ,char **v)
{   if (c==2) {
                printf("b: total of triples less than %s :\t%lu\n",v,Test(atoi(v)));
    }
    return 0;
}

〇〇 发表于 2011-4-23 10:42:53

看来用好算法很重要

wayne 发表于 2011-4-27 09:31:48

32# 〇〇
在装有vxworks 的板子上运行了上面的程序,晒晒截图:

plp626 发表于 2011-5-12 18:28:59

刚才发现〇〇 和wayne 互为马甲。。。

wayne 发表于 2011-5-13 08:38:45

34# plp626
:hug:

:lol

gxqcn 发表于 2011-5-13 09:05:28

刚才发现〇〇 和wayne 互为马甲。。。
plp626 发表于 2011-5-12 18:28 http://bbs.emath.ac.cn/images/common/back.gif

这个似乎没有依据。
倒是感觉两人的行文差异很大,不会是同一人。

wayne 发表于 2011-5-13 09:07:45

36# gxqcn
这个话题很有趣,大家可以深度挖掘一下

G-Spider 发表于 2011-5-13 09:57:35

按本论坛的潜规则。头像不太对劲,应该不是马甲。:)

liangbch 发表于 2011-5-13 12:59:37

两个人的IP不同

plp626 发表于 2011-5-14 14:45:49

我是看它的百度空间猜测的。。
那两个圈圈。。。还有后面哪个date -d ... 很面熟。。。

http://hi.baidu.com/%B0%D7%C0%CB/home
页: 1 2 3 [4] 5
查看完整版本: 如何求出1-n以内勾股数之和