24小时热门版块排行榜     石溪大学接受考研调剂申请>

【调剂】北京石油化工学院2024年16个专业接受调剂
查看: 2601  |  回复: 23
本帖产生 7 个 程序强帖 ,点击这里进行查看

libralibra

至尊木虫 (著名写手)

骠骑将军

[交流] Euler Project Q12 欧拉工程第十二题已有9人参与

Question 12:
The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Let us list the factors of the first seven triangle numbers:

     1: 1
     3: 1,3
     6: 1,2,3,6
    10: 1,2,5,10
    15: 1,3,5,15
    21: 1,3,7,21
    28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

翻译:

自然数求和可生成三角数列.第七个三角数是1 + 2 + 3 + 4 + 5 + 6 + 7 = 28.前10个三角数列元素是:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

下面列出前7个三角数及其整除数:
     1: 1
     3: 1,3
     6: 1,2,3,6
    10: 1,2,5,10
    15: 1,3,5,15
    21: 1,3,7,21
    28: 1,2,4,7,14,28
可以看出,28是第一个有超过5个整除数的三角数.

那么,第一个有超过500个整除数的三角数是多少?

[ Last edited by libralibra on 2011-5-17 at 05:41 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★ ★
ben_ladeng(金币+3, 程序强帖+1): 欢迎继续 2011-05-17 06:43:27
对此题我相当无语,难度在20题以内,我也不知道具体程序跑了多久,反正我吃了个泡面回来,打印出结果了,应该超过10分钟了

c的,matlab对此表示鸭梨很大
CODE:
#include
#include

int main(int args, char* argv[])
{
        long result=1,trinum=0,curnum=1;
        int n=0,i=0,big=0;
        int stop = 500;                //停止要求的除数个数,改成5可以测试28
        while(n         {
                n = 0;
                trinum = 0;
                // 计算当前三角数
                for(i=1;i<=curnum;i++)
                        trinum += i;

                // 从1开始除,计算除数个数
                for(i=1;i<=trinum;i++)
                {
                        if(trinum%i==0) // 如果整除,n+1
                                n += 1;
                }
               
                if(n>=stop) //如果超过stop个,保存结果跳出循环,这里是500个
                {
                        result = trinum;
                        break;
                }

                //如果没超过stop个,记录当前最大的个数并输出
                //这个if可以不要,因为我运行以为电脑死机了
                //所以加了这个判断,找到更接近stop的除数个数时输出,让我有点盼头
                if(n>big)  
                {
                        big = n;
                        printf("Current number: %i [%d]\n",trinum,big);
                }

                //自加自然数增加1,trinum = sum(1:curnum)
                curnum++;
        }
       
        // 打印结果
        printf("%i\n",result);
       
        system("PAUSE");
        return 0;
        }

结果
CODE:
% ans =
%       76576500

[ Last edited by libralibra on 2011-5-17 at 18:14 ]
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2011-05-17 05:38:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

引用回帖:
Originally posted by libralibra at 2011-05-17 05:38:26:
对此题我相当无语,难度在20题以内,我也不知道具体程序跑了多久,反正我吃了个泡面回来,打印出结果了,应该超过10分钟了

c的,matlab对此表示鸭梨很大

[code] #include <stdio.h>
#include <stdlib.h ...

你又遍历!
漩涡的中心有一块空地,空空的。
3楼2011-05-17 11:10:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 谢谢参与交流! 2011-05-17 22:10:21
抛砖引玉一个思路:
CODE:
1. 建立素数表prime[N],N取一个比较大的值
2. 对x=(1+i)*i/2进行质因数分解:
    x=k_1^m_1 * k_2^m_2 ... * k_n^m_n
    其中^表示指数,k_1 ... k_n表示素数
3. 计算x因子总数:
    divisors = (m_1 + 1) * (m_2 + 1) * ... * (m_n + 1)
4. 判断divisors是否超过500,如果没有,跳到第2步,尝试下一个x;如果已经超过500,则输出x

有素数表之后,这个算法应该比较快,因为质因数分解的时候,只要从小到大判断对素数的整除性,然后顺便统计质因数的指数,同时如果能整除,试除用的x可以缩小为
CODE:
x/=prime[i]

再继续作测试,这样,算法很快就收敛了

问题在于事先对prime[N]中的N的估计怎样才合理,恩...

[ Last edited by sudo on 2011-5-17 at 12:56 ]
4楼2011-05-17 12:54:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 好详细的分析! 2011-05-17 22:24:53
想到一个依赖组合计数的算法:
首先分析特殊情况,对于一个a1*a2*a3*a4*...*an=A酱紫的数,假定a1 如,2*3*5*7=210的因数数有:
2, 3, 5, 7
6, 10, 14,15, 21,35
30, 70,105,42
210
麻烦的问题是不完全是素数的情况,对于任意C=A*B,令A和B为素数积,当且仅当AB没有交集的时候C才是素数积,否则就带来可可怕的乘方,乘方会产生很多相同的因数。为了解决这个问题,需要分析素数的乘方能产生多少个相同解:
首先分析下素数乘方可能产生的相同解个数,假定某数可以分解出n个相同的素数因子:a1,a2,...an,这些因子的恼人之处就在于,不同的乘数可能产生相同的乘积,原本这些乘积是独立计数的,最终却需要剔除。一个简单的解决办法是,将n个数叠起来,使它们像这样:a1, a1^2, a1^3...a1^n,对这样的数列再次应用素数组合,但分析的时候要独立分析:这些数中只取一个的时候,产生独立解,其余的情况,都不能再计数,理由是,数列中的任意数的组合要么相同,要么不可能产生。因此,对于n个素数相同的情形,只能将其算一个素数的组合位置,但是要记入n种状况。最终的组合要借助计算机来完成,举例如下:
8*6 = 2*2*2*2*3,分离素数乘方表和素数表,得
乘方表:2,4,8,16,素数表2,3
在2的位置需要替换4种情况,当C21时,2本来只计数1,现在需要计数4,C22时2*3本来只有一个解,现在有4个解。对于2和3而言,原本的解像这样:
2, 3, 2*3
现在的解要将4个值替换到2的位置:
2,4,8,16,3,2*3,4*3,8*3,16*3
在更多情况下和这个类似,如果是24*6 = 2*2*2*3*2*3,分离出来的素数表仅有2,3,乘方表则有两个:2,4,8,16和3,9
原来的解是2,3,2*3,分两遍替换进去就成了这样:
替换2变成:2,4,8,16,3,2*3,4*3,8*3,16*3
再替换掉3变成:2,4,8,16,3,9,2*3,2*9,4*3,4*9,8*3,8*9,16*3,16*9
可以看到,由于无法知道哪个数是需要替换的,所以也无法直接构建公式,光组合算法还不成,得在组合算法之上再递归计数。
生成因数表和递归计数都不是啥问题,问题是组合算法,排列组合的算法的复杂度很高啊…
漩涡的中心有一块空地,空空的。
5楼2011-05-17 13:41:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 鼓励交流! 2011-05-17 22:26:43
引用回帖:
Originally posted by sudo at 2011-05-17 12:54:30:
抛砖引玉一个思路:

[code]
1. 建立素数表prime[N],N取一个比较大的值
2. 对x=(1+i)*i/2进行质因数分解:
    x=k_1^m_1 * k_2^m_2 ... * k_n^m_n
    其中^表示指数,k_1 ... k_n表示素数
3. 计算x因子 ...

素数表倒是不需要估计,俺给出的这个素数算法可以动态定制素数表,在参数里面传递函数指针进去就可以随意处理每个素数。不过这个算法有点小bug,会漏掉一个数的测试,修改offset为3的倍数,BUFSZ修改为6的倍数即可解决这个问题。http://muchong.com/bbs/viewthread.php?tid=3192387&fpage=2#pid1151737

[ Last edited by huycwork on 2011-5-17 at 14:31 ]
漩涡的中心有一块空地,空空的。
6楼2011-05-17 13:54:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+3): 谢谢参与交流! 2011-05-17 22:28:58
引用回帖:
Originally posted by huycwork at 2011-05-17 13:54:55:
素数表倒是不需要估计,俺给出的这个素数算法可以动态定制素数表,在参数里面传递函数指针进去就可以随意处理每个素数。不过这个算法有点小bug,会漏掉一个数的测试,修改offset为3的倍数,BUFSZ修改为6的倍数 ...

嗯,有空我拜读一下~

话说你5楼的算法复杂化了...

像4楼的算法就直接应用排列组合里面的乘法定理就出来了,不需要那么麻烦的

先以你举的210=2*3*5*7为例:

因数一共有16个:
1,
2, 3, 5, 7
6, 10, 14,15, 21,35
30, 70,105,42
210

从质因数的指数上很容易看出来,质因数2可以取0个或1个(2种取法),质因数3可以取0个或1个(2种取法),同理质因数5和7分别都可以有两种取法,故因数总数为:

2*2*2*2=16个

这就很好算出来

再举144 = 2^4 * 3^2为例

质因数2可以有5种取法,质因数3一共有3种取法,所以因数总数为
5*3=15个


这么做是没有重复的,因为因数本身也是质因的组合......这个方法比较直观......

[ Last edited by sudo on 2011-5-17 at 14:23 ]
7楼2011-05-17 14:18:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

引用回帖:
Originally posted by huycwork at 2011-05-17 11:10:45:
你又遍历!

我解题一向粗暴简单,哈哈.
不过老兄你的分析的确很好.我抽空修改下代码
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
8楼2011-05-17 14:32:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+1): 鼓励交流! 2011-05-17 22:29:39
引用回帖:
Originally posted by sudo at 2011-05-17 14:18:50:
嗯,有空我拜读一下~

话说你5楼的算法复杂化了...

像4楼的算法就直接应用排列组合里面的乘法定理就出来了,不需要那么麻烦的

先以你举的210=2*3*5*7为例:

因数一共有16个:
1,[ ...

不错不错,还得打基础呃~~~~
这样一来,复杂度就主要看如何分离因数表了。
结果又回到了素数算法呃……
漩涡的中心有一块空地,空空的。
9楼2011-05-17 14:40:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
余泽成(金币+2): 鼓励交流! 2011-05-17 22:29:49
sudo兄7楼的算法再解释下?
>> factor(75676500)
ans =
     2     2     3     3     5     5     5    67   251

照此,75676500 = 2^2*3^2*5^3*67^1*251^1
它的因子个数是 3*3*4*2*2 = 144,也不是500多啊
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
10楼2011-05-17 15:55:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 libralibra 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[找工作] 家乡二本高校/沿海传统私企,如何抉择? 10+5 化学巷 2024-04-15 13/650 2024-04-19 09:54 by 光催京城
[基金申请] 估计今年青基又没戏 +8 忆念7 2024-04-18 8/400 2024-04-18 19:46 by jackyu2014
[论文投稿] 最近遇到这样一个问题 4+3 asd123gfa689 2024-04-18 6/300 2024-04-18 18:43 by chaodanming
[基金申请] 基金和生小孩 +32 Ausy 2024-04-15 34/1700 2024-04-18 12:13 by wangzhenyft
[博后之家] 博后换方向可行吗? +3 越越不暴躁 2024-04-15 3/150 2024-04-18 10:58 by ciompman
[基金申请] 申请省自然科学基金,研究区能否是省外区域 100+3 喜欢兔兔的我 2024-04-15 11/550 2024-04-17 23:49 by 喜欢兔兔的我
[教师之家] 调动考察遇到问题。 +7 ZHONGWU_U 2024-04-12 9/450 2024-04-17 15:00 by shl2112501
[考研] 322求调剂 +7 本己上岸 2024-04-16 7/350 2024-04-17 11:49 by duanxz
[考研] 浙江海洋大学 船舶与海运学院 交通运输专硕 (交通信息工程及控制)接收调节 +4 joee 2024-04-15 8/400 2024-04-16 20:47 by TommyZiAng
[考博] 24计算机申博 +4 学无止境er 2024-04-13 6/300 2024-04-16 19:15 by 学无止境er
[考博] 25年申博求助,射频方向 +4 SherlockAH 2024-04-15 10/500 2024-04-16 18:06 by ljysudaee
[有机交流] 粗产品在甲醇中回流2次是啥意思? +4 DDT. 2024-04-12 9/450 2024-04-16 12:01 by 宁静远行
[考研] 广州大学光电信息工程专业调剂,招收物理学专业学生 +5 txhx4010 2024-04-14 7/350 2024-04-16 10:52 by domax
[考研] 材料专硕329调剂遗留难民 +9 Kaylawander 2024-04-13 9/450 2024-04-15 19:21 by mumin1990
[论文投稿] with efitor 越久是不是越容易拒稿。我的已经一个多月了 +5 lizhengke06 2024-04-14 5/250 2024-04-15 18:33 by jonewore
[考研] 328求调剂 +3 send rgsc 2024-04-14 7/350 2024-04-15 18:17 by zw_muchong
[考研] 334求调剂 +4 学药救人 2024-04-14 4/200 2024-04-15 15:05 by hunanzang
[考研] 323求调剂 +15 啊Q精神~ 2024-04-13 17/850 2024-04-14 12:44 by qjhawk
[考研] 338求调剂 +3 18280338551 2024-04-14 5/250 2024-04-14 10:03 by tcni
[考研] 331求调剂 +12 廖喆虓 2024-04-12 12/600 2024-04-13 17:10 by lincunhui
信息提示
请填处理意见