24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1929  |  回复: 14
本帖产生 2 个 程序强帖 ,点击这里进行查看

holmescn

金虫 (正式写手)

[交流] Euler 工程第十六题:2的1000次方的各项和已有6人参与

这两天新版开通,版里很热闹,也就没有放题出来。今天放一个题吧。

已知2的15次方等于32768,其各项和为:3+2+7+6+8 = 26 。
那么2的1000次方的各项和是多少呢?
回复此楼

» 猜你喜欢

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

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-27 15:24:11
来个Perl版:
CODE:
#!/usr/bin/perl
use bigint;
$sum += $_ foreach(2**1000 =~ /(.)/g);
print "result:$sum\n";

结果:1366
漩涡的中心有一块空地,空空的。
2楼2011-05-26 21:38:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢交流讨论! 2011-05-27 15:24:41
引用回帖:
Originally posted by huycwork at 2011-05-26 21:38:51:
来个Perl版:
CODE:
#!/usr/bin/perl
use bigint;
$sum += $_ foreach(2**1000 =~ /(.)/g);
print "result:$sum\n";

结果:1366

咳,我突然想到一个好玩的东西...

对于一个数的大指数出来的各个位数,0-9的概率分布趋向于均匀分布~

那么我们可以做大致的估算:

2^1000的位数为

向下取整(1000 * log 2) + 1 = 302 位

对于每个位的期望为4.5,然后所有位的和就约等于

302 * 4.5 = 1359

很接近,数学真是奇妙啊,哈哈哈~

嗯,回到正题,这个题考的是两个东西:

1. 大数乘法
2. 整数动态规划,求最少大数乘法次数的步骤

好的C算法在一般PC上应该能把运算时间控制在0.5秒以内,嗯~

PS:土土地思考,从2^31=2147483648开始算的话:
2^31 * 2^31 = 2^62
2^62 * 2^62 = 2^124
2^124 * 2 = 2^125
2^125 * 2^125 = 2^250
2^250 * 2^250 = 2^500
2^500 * 2^500 = 2^1000
只需要6次大数乘法,嗯,不确保这是最优的分法...不过这么算已经挺快了...

[ Last edited by sudo on 2011-5-26 at 22:13 ]
3楼2011-05-26 21:52:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+1): 谢谢交流讨论! 2011-05-27 15:26:19
引用回帖:
Originally posted by sudo at 2011-05-26 21:52:34:
咳,我突然想到一个好玩的东西...

对于一个数的大指数出来的各个位数,0-9的概率分布趋向于均匀分布~

那么我们可以做大致的估算:

2^1000的位数为

向下取整(1000 * log 2) + 1 = 302 位

对于 ...

这么说的话,这个好玩的东西还有另外一个扩展了:散列码,乘法运算的过程中,除了首位和末位之外,中间的所有位都与因数的位数相关,得出的结果中包含了各种离散的因素,得出的值也必定是均匀分散的。期望值应该也非常接近这样的猜测

这题以乘方来优化的话,乘法次数是少了许多,效率却不见提高许多,软件实现的大数类还是不如硬件geilivable啊……

突然想实现一个补码运算的大数类了
漩涡的中心有一块空地,空空的。
4楼2011-05-26 22:29:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by huycwork at 2011-05-26 22:29:58:
这么说的话,这个好玩的东西还有另外一个扩展了:散列码,乘法运算的过程中,除了首位和末位之外,中间的所有位都与因数的位数相关,得出的结果中包含了各种离散的因素,得出的值也必定是均匀分散的。期望值应 ...

没听说过什么硬件实现了大数运算诶...
5楼2011-05-26 22:37:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by sudo at 2011-05-26 22:37:29:
没听说过什么硬件实现了大数运算诶...

那我们不是2^32次方以下的数都没法算了?
漩涡的中心有一块空地,空空的。
6楼2011-05-26 22:42:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖
引用回帖:
Originally posted by huycwork at 2011-05-26 22:42:09:
那我们不是2^32次方以下的数都没法算了?

=,=这个不能算“大数”吧...
7楼2011-05-26 22:44:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

微尘、梦想

木虫 (知名作家)


小木虫(金币+0.5):给个红包,谢谢回帖
就让我幻想一下吧:
开辟1001位的内存A,高位置1,其余位置0,再开辟4位内存,放上1010,如果刚好有这么一条指令DIV AB,表示A除以B,商返回给A,余数返回给B,然后进行一个循环,把B中的数相加,就是答案了。

我实现不了啊!
任风云变幻,我笑对人生!
8楼2011-05-26 22:51:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+1): 谢谢交流! 2011-05-27 15:26:38
引用回帖:
Originally posted by sudo at 2011-05-26 22:44:24:
=,=这个不能算“大数”吧...

把寄存器调大一些不就可以了嘛~
不过这电路板就复杂了,严重怀疑散热性能

我最近就实现了一个基于位的模板类,效率很不高啊,就是因为减少乘法次数引入了负数,整个代码都复杂了。
漩涡的中心有一块空地,空空的。
9楼2011-05-26 22:51:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huycwork

金虫 (著名写手)

引用回帖:
Originally posted by 微尘、梦想 at 2011-05-26 22:51:08:
就让我幻想一下吧:
开辟1001位的内存A,高位置1,其余位置0,再开辟4位内存,放上1010,如果刚好有这么一条指令DIV AB,表示A除以B,商返回给A,余数返回给B,然后进行一个循环,把B中的数相加,就是答案 ...

你这还竖式除法了都

以10为模进行多项式乘法计算,简单又划算。
漩涡的中心有一块空地,空空的。
10楼2011-05-26 22:59:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见