| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1939 人关注过本帖
标题:四方定理
只看楼主 加入收藏
yu1543054075
Rank: 1
等 级:新手上路
帖 子:102
专家分:8
注 册:2015-4-30
结帖率:90.24%
收藏
已结贴  问题点数:10 回复次数:15 
四方定理
/*四方定理的内容是:所有的自然数至多至多只要用4个数的平方和就可以表示,编程验证该定理。
技术要点:本实例对4个变量i,j,k,l采用穷举试探的方法进行计算,当满足定理中的条件时输出计算结果。*/
#include<stdio.h>
int main(void)
{
    long i,j,k,l,n;
    printf("input a integer number:\n");
    scanf("%ld",&n);
    for(i=0;i<=n;i++)
        for(j=0;j<=i;j++)
            for(k=0;k<=j;k++)
                for(l=0;l<=k;l++)
                    if(i<<2+j<<2+k<<2+l<<2==n)//利用移位来代表平方
                    {
                        printf("%ld<<2+%ld<<2+%ld<<2+%ld<<2=%ld\n",i,j,k,l,n);
                        return 0;
                    }
}
不知道为什么结果不对
搜索更多相关主题的帖子: include number 自然数 技术 
2015-05-02 14:06
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
<<与+都优先级?而且printf能这样用吗

一片落叶掉进了回忆的流年。
2015-05-02 14:33
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:0 
所有的自然数至多至多只要用4个数的平方和就可以表示,并不意味着每个自然数必须用四个数的平方和表示
2015-05-04 02:31
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
这个也算定理?任何数都有太多的4个数的平方和了。
程序代码:
#include <stdio.h>
#include <math.h>
void main()
{
    int i,j,k,n,a[4]={0};
    while(1)
    {
        printf("输入验证数(Q/q:退出):");
        if(!scanf("%d",&n))break;
        j=(int)sqrt(n);
        for(i=0;i<4;i++)a[i]=0;
        while(a[3]<j)
        {
            a[0]++;
            for(i=0;i<3;i++)
            {
                if(a[i]>j)
                {
                    a[i]=0;
                    a[i+1]++;
                }
            }
            for(i=0,k=0;i<4;i++)k=k+a[i]*a[i];
            if(k==n)
            {
                printf("%d=",n);
                for(i=0;i<3;i++)printf("%d^2+",a[i]);
                printf("%d^2\n",a[3]);
            }
        }
    }
}


能编个毛线衣吗?
2015-05-04 06:50
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 4楼 wmf2014
这还真是定理。证明该定理的难点不在于用若干数的平方和,而在于至多只用4个(类似的有四色定理)。属数论范畴。

重剑无锋,大巧不工
2015-05-04 18:32
yu1543054075
Rank: 1
等 级:新手上路
帖 子:102
专家分:8
注 册:2015-4-30
收藏
得分:0 
wmf2014可以说一下你的思路吗
2015-05-04 20:33
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 6楼 yu1543054075
所有穷举法都可以通过设计一个合理的计数器解决。计数器既可以每位进制相同,也可每位进制不同,既可对应数字,也可对应字母,其实所谓的全排列也是穷举法的一种。初学者碰到穷举时通常是一个循环套一个循环,有几位就套几个,这实在是有辱智商。

能编个毛线衣吗?
2015-05-04 21:46
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
楼上姑娘性格鲜明。我也献丑来穷举一个与大家交流编码心得
程序代码:
#include <stdio.h>
#include <math.h>

int f(int a, int n)
{
    int t;
    t = sqrt(a);
    if(t * t == a)
    {
        printf("%d^2", t);
        return 1;
    }
    if(n <= 1) return 0;
    for(; t && !f(a - t * t, n - 1); t--);
    if(!t) return 0;
    printf(" + %d^2", t);
    return 1;
}

int main()
{
    int i;
    for(i = 2000000000; i < 2000000040; i++)
    {
        printf("%d = ", i);
        f(i, 4);
        puts("");
    }
    return 0;
}


[ 本帖最后由 beyondyf 于 2015-5-5 08:33 编辑 ]

重剑无锋,大巧不工
2015-05-04 22:48
LSASTA
Rank: 2
等 级:论坛游民
帖 子:11
专家分:11
注 册:2015-5-4
收藏
得分:0 
回复 7楼 wmf2014
好不客气
2015-05-04 22:56
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 8楼 beyondyf
赞!学习了。
计数法到大数时运算速度的确有问题。
这个算法在数分解上很独到,return 1或0还是很讲究的。不懂四方定理,看到楼主的代码后就百度恶补了下,让各位大神见笑了。汗~~~~~~~

[ 本帖最后由 wmf2014 于 2015-5-4 23:58 编辑 ]

能编个毛线衣吗?
2015-05-04 23:20
快速回复:四方定理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018615 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved