大数求值问题(预祝朋友们元旦快乐!)

delphiwcdj 2009-12-28 04:07:27
需要计算表达式 ∑(i=2,200)( x^i * p(i) / w )的值,其中

P(i)=[C(100000,i)C((100000-i),2(200-i))C(2(200-i),200-i)]/(C(100000,200))^2

w=∑(j=2,200)( p(i) )

问题:
(1) 由于数字太大,编程不好实现,有什么好的算法用于求解此类大数问题的吗?用数组?用第三方大数库?
(2) 如果想简便点儿,有没有高级点的科学计算器,可以通过输入表达式来求解的,因为有求和运算。

快元旦了,祝大家身体健康,天天开心!

PS: Wolfram是一个可以求解表达式的搜索引擎,但是可能上述表达式比较长,始终不能识别。
...全文
186 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
OoPgP 2009-12-29
  • 打赏
  • 举报
回复
同乐,同乐!
接点分。
raoyc2008 2009-12-29
  • 打赏
  • 举报
回复
不会弄,帮顶下吧
  • 打赏
  • 举报
回复
问题:
(1) 由于数字太大,编程不好实现,有什么好的算法用于求解此类大数问题的吗?用数组?用第三方大数库?
(2) 如果想简便点儿,有没有高级点的科学计算器,可以通过输入表达式来求解的,因为有求和运算。


1.用大数库,不用自己造车了,gmp库不错,不大,是GNU项目。
2.for加求和运算即可。

myullian 2009-12-29
  • 打赏
  • 举报
回复
学习下...
luoqi 2009-12-29
  • 打赏
  • 举报
回复
看看C在没有long类型时的实现,就很容易了.
typedef struct long {int hi; int lo;};
现在的128位也一样;
typedef struct _i128 {_int64 hi, _int64 lo; };
如此:
你想要10000位的大数也可以,但四则运算,需要你自己做了.
delphiwcdj 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 luoqi 的回复:]
用我上面的方法,再自己做阶乘运算,不会太难.
[/Quote]
谢谢你,有时间好好琢磨琢磨。:)
delphiwcdj 2009-12-29
  • 打赏
  • 举报
回复
up
liuhaifeng1976 2009-12-29
  • 打赏
  • 举报
回复
DING
luoqi 2009-12-29
  • 打赏
  • 举报
回复
用上面的方法,注意进位就行.
luoqi 2009-12-29
  • 打赏
  • 举报
回复
用我上面的方法,再自己做阶乘运算,不会太难.
delphiwcdj 2009-12-29
  • 打赏
  • 举报
回复
在网上找了一些计算器,觉得SpeQ Mathematics还比较强大,但是还是不能求∑运算(它只提供了一个sum函数,参数需要手动加入),而且数值大小还是有限制。
delphiwcdj 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 hairetz 的回复:]
问题:
1.用大数库,不用自己造车了,gmp库不错,不大,是GNU项目。
2.for加求和运算即可。
[/Quote]
谢谢大家!我说的“求和”指的是用科学计算器计算时不能求∑这种运算。
delphiwcdj 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 selooloo 的回复:]
最好再用数学方法进行化简,式子这么复杂也会影响精确度啊
[/Quote]
似乎已经不能再化简了。
不知道有人用过HugeCalc.h这个库没有?它里面提供了一个接口,但是用的时候有点儿问题。

integer p(int i)
{
integer hugeResult_fenmu,hugeResult_fenzi,h1,h2,h3,hRe;

hugeResult_fenmu.Combination(100000,200).Pow(2);
hugeResult_fenzi=h1.Combination(100000,i)*h2.Combination(100000-i,2*(200-i))\
*h3.Combination(2*(200-i),200-i);
hRe=hugeResult_fenzi/hugeResult_fenmu;
return hRe;
}
selooloo 2009-12-28
  • 打赏
  • 举报
回复
最好再用数学方法进行化简,式子这么复杂也会影响精确度啊
delphiwcdj 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dskit 的回复:]
python学起来比较容易,解决这个问题的python代码更花不了多少时间

新建一个test.py,在compute里加内容 就行了
Python codedef compute():
data= raw_input()print dataif__name__=="__main__":
compute()

[/Quote]
朋友你能帮我实现一下吗?
dskit 2009-12-28
  • 打赏
  • 举报
回复
python学起来比较容易,解决这个问题的python代码更花不了多少时间

新建一个test.py,在compute里加内容 就行了
def compute():
data = raw_input()
print data

if __name__ == "__main__":
compute()

delphiwcdj 2009-12-28
  • 打赏
  • 举报
回复
谢谢LS两位!
matlab查了,好像计算不了那么大的数,不过python好像可以,但是还不会用
dskit 2009-12-28
  • 打赏
  • 举报
回复
用python吧, 可以解决大数的问题。
wuyu637 2009-12-28
  • 打赏
  • 举报
回复
建议你去查查matlab或者fortain的资料,c++处理数学计算比较弱。
delphiwcdj 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fancymouse 的回复:]
GMP
[/Quote]
THX,我看一下。
加载更多回复(4)

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧