24小时热门版块排行榜    

查看: 2031  |  回复: 30
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

holmescn

金虫 (正式写手)

[交流] Euler 工程 第廿九题:有多少不同的项? 已有4人参与

第廿八题是个数学题, 除了生成矩阵的算法外, 好像没什么太多的思考.  所以再来个题吧.

取指数函数a^b, 其中a和b都取遍[2,5]间的所有整数, 所有可能的组合可以得到:

2^2=4, 2^3=8, 2^4=16, 2^5=32
3^2=9, 3^3=27, 3^4=81, 3^5=243
4^2=16, 4^3=64, 4^4=256, 4^5=1024
5^2=25, 5^3=125, 5^4=625, 5^5=3125

把结果从小到大排列, 并去掉重复的数:

4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

一共15个数

如果a和b取遍[2,100]间所有的整数, 那可以得到多少个不同的数?

[ Last edited by holmescn on 2011-6-17 at 10:00 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流! 2011-06-19 17:19:27
引用回帖:
Originally posted by holmescn at 2011-06-18 17:49:22:
这个大数算法有什么关系呢?'

当然,我可以先筛出小于100的质数. 然后再把2到100这些数做分解. 不过,我觉得这个算法的瓶颈不在这里. 那个分解过程用不了1秒. 主要是下面怎么做指数乘法, 并用什么方法做比较 ...

电路板实现的乘除算的是定点数,计算时间接近常数,但目前实现大数算法时多半都用用循环实现的,像加法的大数算法,二进制的补码实现看起来像这样:
CODE:
int add(int bs1, int bs2){
        int t, ac = bs2;
        t = bs1 & ac;
        bs1 ^= ac;
        while(t){
                t <<= 1;
                ac = t;
                t = bs1 & ac;
                bs1 ^= ac;
        }
        return bs1;
}

乘法更复杂,仿照竖式运算复杂度会达到n*n,跟电路板的效率根本没法拼,不能随便祭出大数算法的呃~

[ Last edited by huycwork on 2011-6-18 at 18:18 ]
漩涡的中心有一块空地,空空的。
13楼2011-06-18 18:14:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 31 个回答

holmescn

金虫 (正式写手)

好像又是个关于质数的题, 难怪"1+2=3"这么重要呢.
2楼2011-06-17 10:07:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-17 18:21:22
引用回帖:
Originally posted by holmescn at 2011-06-17 10:07:50:
好像又是个关于质数的题, 难怪"1+2=3"这么重要呢.

没办法咯,所有的数都是质数生成的。
这题好像要筛数,前面的4*4个数中,只筛掉了1个数,原因是2^4和4^2=2^4
更大规模的时候,看起来需要把2~100内的所有素数和合数标记下都表示成指数的形式,筛掉那些指数落在2~100之间的合数。
漩涡的中心有一块空地,空空的。
3楼2011-06-17 11:41:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
dubo(金币+1): 欢迎常来程序语言版讨论 2011-06-17 18:21:33
python
CODE:
print len([_x for _x in [a**b for a in xrange(2,101) for b in xrange(2,101)] if not _x in locals()['_[1]']])

结果
CODE:
9183
Elapsed time: 1.91284227 seconds

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2011-06-17 15:16:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见