| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4762 人关注过本帖
标题:找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。
只看楼主 加入收藏
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。
下面是题目 和 我想到的最优算法,大家看看有没有更好的算法

程序代码:
/*编写一个应用程序,验证以下等式是成立的:
3^3+4^3+5^3=6^3;
6^3+7^3+...+69^3=180^3;
找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。*/

#include <stdio.h>
#define N 1200 //大于1200后就快越界了

int main(void)
{
    int x[N];
    long sum = 0;
    for (int i = 0; i < N; i++)// 把0到N之间的的数的3次方赋值到对应下标的数组内,以提高运算速度
        x[i] = i * i * i;
    for (int i = 2; i < N; i++)//作为数组下标
        for (int j = 1; j < i; j++)//作为开始算的最小值
            for (int k = j; k < i; k++)//不断提高最左边值
            {
                sum += x[k];
                if (sum == x[i])
                {
                    printf("%d^3 + ...... + %d^3 = %d^3\n", j, k, i);
                    sum = 0;
                    break;
                }
                if (sum > x[i])//当前面的整数和大于目标值,中断循环以提高效率
                {
                    sum = 0;
                    break;
                }
            }

    return 0;
}


----------------------上面的算法有问题,更正为下面的------------------------------

程序代码:
#include <stdio.h>
#define N 5000 

int main(void)
{
    long x[N];
    long sum = 0;
    for (int i = 0; i < N; i++)// 把0到N之间的的数的3次方赋值到对应下标的数组内,以提高运算速度
        x[i] = i * i * i;
    for (int i = 2; i < N; i++)//作为数组下标
        for (int j = 1; j < i; j++)//作为开始算的最小值
            for (int k = j; k < i; k++)//不断提高最左边值
            {
                sum += x[k];
                if (sum == x[i])
                {
                    printf("%d^3 + ...... + %d^3 = %d^3\n", j, k, i);
                    sum = 0;
                    break;
                }
                if (k + 1 == i)// 修改了这里
                {
                    sum = 0;
                    break;
                }

            }

    return 0;
}


[此贴子已经被作者于2017-9-25 10:26编辑过]

搜索更多相关主题的帖子: 整数 立方 int sum for 
2017-09-23 16:03
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
我就发一幅图片,看看有没有启发~
图片附件: 游客没有浏览图片的权限,请 登录注册

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-23 18:11
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
回复 2楼 九转星河
并不是都从1开始,所以不能套用这个公式,比如3的立方+4的立方+5的立方 = 6的立方
2017-09-23 21:52
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
回复 3楼 yanzy
所以说啊,不是从1开始的可以相减啊~之后就判断是否存在整数解集就可以啦~

时间复杂度理论上可以优化一个几何级别~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-24 13:52
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
回复 4楼 九转星河
有道理啊,是一个新思路,我想想怎么写一下。不过时间复杂度应该是一样的
2017-09-24 16:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 yanzy
判断一个数N是否能分解成若干个连续的立方和……

第一次直接用公式判断是否存在解集……


第二次 n=N-1^3;
第三次 n=N-(1^3+2^3);
第四次 n=N-(1^3+2^3+3^3);
……
化了一下好像可以化出

根号((根号(1+8n)-1)/2)要为整数~

恕我不方便截图手写只能用这表达方式说明哈~

这方法理论上判断单个数时间复杂度为o(n);
总时间复杂度理论上为o(n^2);~

[此贴子已经被作者于2017-9-24 22:19编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-24 22:16
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
还有一种逆向思维~

那公式是否是一个数的立方?~

感觉这样更加简单~

不过如果要按顺序输出的话要另外处理例如要另外找个存储结构进行保存才行~


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-09-24 22:25
快速回复:找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立 ...
数据加载中...
 
   



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

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