〇〇 发表于 2011-4-19 07:32:54

如何求出1-n以内勾股数之和

比如1-10
3+4+5 +6+8+10=36

gxqcn 发表于 2011-4-19 07:58:32

请问:若 n=7 时,包含“6”吗?

g99 发表于 2011-4-19 09:51:58

楼主的例子是包含n的:lol
1~10:3+4+5+6+8+10=36

gxqcn 发表于 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
全加起来

wayne 发表于 2011-4-19 11:41:22

勾股数 形如:{a^2+b^2 ,a^2-b^2 ,2ab}
所以问题的实质就是,求所有满足a^2+b^2 <= n 的非平凡的正整数解。

wayne 发表于 2011-4-19 11:42:59

关于 半径为根号n的圆内 的整点个数,以及所有的整数点, 我记得在Mathematica里面是有现成的函数的

〇〇 发表于 2011-4-19 12:47:57

非平凡的是怎么理解呢

G-Spider 发表于 2011-4-19 12:57:17

#6,试一下编程:#include <stdio.h>
#include <math.h>
typedef unsigned int DWORD;
DWORD Test(DWORD n)
{
    DWORD t,sum=0;
    DWORD a,b;
   
    for(b=1;b<(n>>1);b++)
      for(a=b+1;a<=n;a++)
      {
            t=(DWORD)pow((double)a,2.0);
            if((t+(DWORD)pow((double)b,2.0))<=n)
                sum+=(t+a*b)<<1;
      }      
         
    return sum;
}

int main()
{
      
      printf("%u    %u\n",10,Test(10));
   
    return 0;

}

wayne 发表于 2011-4-19 21:53:49

9# G-Spider
我也写了一个:#include <stdio.h>
int Test(int n)
{
    int t,sum=0;
    int a,b;
    for(b=1;b*b<n/2.0;b++)
      for(a=b+1;a*a<=n;a++)
      {t=a*a+b*b;
            if(t<=n)
               printf("%d\t%d\t%d\t\n",a*a-b*b,2*a*b,t), sum+=2*a*(a+b);else break;
      }            
    return sum;
}

int main(int c ,char **v)
{   if (c==2) {printf("total:%s    %d\n",v,Test(atoi(v))); }
    return 0;
}
页: [1] 2 3 4 5
查看完整版本: 如何求出1-n以内勾股数之和