注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Nihui's Blog

nihui的私人空间和日志

 
 
 

日志

 
 

一个算组合数“nCr”的 python 脚本  

2007-06-30 12:45:40|  分类: Opensource |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近学了二项式定理,里面有个组合数“nCr”,原本是可以用计算器算的。但是只要数字一大,就显示:“Math ERROR”了,所以决定用 python 实现一下算法。

脚本名称:zuhe.py
编码:gb18030


#!/usr/bin/python
# coding=gb18030
# Filename: zuhe.py
# This python script was written by nihui,Jun 30 in 2007
try:
    m = int(raw_input('请输入一个正整数作为组合数下标:'))
    n = int(raw_input('请输入一个正整数作为组合数上标:'))
except ValueError:
    m = -1;n = -1
if m < 0 or n < 0:
    print "输入错误数据,无法计算。"
else:
    if m < n:
        print "下标数字 < 上标数字,无法计算。"
    else:
        print "ok!"
        #数据异常处理完成
        s1 = 1
        for i1 in range(m-n+1,m+1):
            s1 = s1 * i1
            #s1 = (m-n)*(m-n+1)*.......*(m-2)*(m-1)*m
        s2 = 1
        for i2 in range(2,n+1):
            s2 = s2 * i2
            #s2 = n!
        r = s1 / s2
        print "分子:",s1
        print "分母:",s2
        print "组合数:",r


最后的“r”就是结果,需要输入“m”和“n”,分别对应“nCr”中的“n”和“r”。
“s1”和“s2”仅仅是计算中的分母和分子,如果不愿意看到的话,可以把倒数第二和第三行删除即可。

以下是我机子上的效果

[nihui@Nihui ~]$ python zuhe.py
请输入一个正整数作为组合数下标:888
请输入一个正整数作为组合数上标:222
ok!
分子: 2546582700387195096783871663929013551793126478753278267777614355115298678489790572476
4847851832103856389389416752002933524869798665928938794959712143772352994169111241118
3951798394338709543986347737316009386283865306059767848657890120241958299243924424608
0400855884253442802402285126228480296769478822502631124849076170335518586634979889371
7289651408173412476635322762059877559153711852436109217640551003514879620300662068576
1820862381111813194787221560357318768151235934438356273876436292985436072109953950681
9915273809911006868130039908319660110538847853930208759630481158225484002099200000000
00000000000000000000000000000000000000000000000
分母: 1120507558006441391828246578742885033161823448362010725664180664425751706544896049884
5547308589123315272225515821582083550911856777042555566494995461508350030412945015928
3620378895008790288025331140066449564826484508657579315925606917480955013780196392370
1418514184652520492639441452609118711474453282037451685103688549156372800995882648661
9432294797566054909576516569399296000000000000000000000000000000000000000000000000000
00
组合数: 2272704616930888846210133966295716335245094887838959837848347026112476456291117459625
5033577379532510641777999216340499235098223841355068494697417032767276390720353028493
8345537587751004410813530985242132402401815200

看来从 888 个样品中,选择 222 个样品有多达 2272704616930888846210133966295716335245094887838959837848347026112476456291117459625
5033577379532510641777999216340499235098223841355068494697417032767276390720353028493
8345537587751004410813530985242132402401815200
 种选法,HOHO~~~~

  评论这张
 
阅读(1492)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017