项目欧拉数45

时间:2011-12-06 13:08:55

标签: c

来自Project Euler,problem 45

  

三角形,五边形和六边形数字由以下公式生成:

     

三角形T_(n)= n(n + 1)/ 2 1,3,6,10,15 ......

     

五角形P_(n)= n(3n-1)/ 2 1,5,12,22,35 ......

     

六角形H_(n)= n(2n-1)1,6,15,28,45 ......

     

可以验证T_(285)= P_(165)= H_(143)= 40755。

     

找到下一个三角形和六角形的三角形数字。

这是问题所在。 它非常简单明了,但问题是,当三角形数值超过int数据类型中的最大值时,我的程序会遇到一个小故障。我尝试过为其他数据类型搜索网络但没有成功。

代码

     #include<stdio.h>
     int main(void)
     {
        int i,j,t,h,p,k;
        int n=10000;
        for(i=0;i<n;i++)
        {
            t=(i*(i+1))/2;
            for(j=0;j<n;j++)
            {   
                h=j*(2*j-1);
                if(h>t)
                break;
                if(h==t)
                {   
                    //printf("%d %d\n",h,t);
                    for(k=0;k<n;k++)
                    {
                        p=(k*(3*k-1))/2;
                        if(p>h)
                        break;
                        if(p==h)
                        {
                            printf("%d %d\n",p,i);
                            break;
                        }   
                    }   
                }

            }   
        }       
        printf("done\n");
        return(0);
     }

1 个答案:

答案 0 :(得分:5)

尝试unsigned long long。它应该工作。