如何计算包含大小写字母和数字的8位密码组合数?
8位含大写、小写、数字的密码组合数计算
你的初始思路算出的62^8,是所有由大写字母、小写字母、数字组成的8位密码总数,但这里面包含了不符合要求的情况——比如全小写、全大写、全数字,或者只包含其中两类的密码。而题目要求的是同时包含三类字符的密码,所以得用容斥原理把不符合的情况剔除掉,具体步骤如下:
分解计算步骤:
- 第一步:计算总组合数,也就是所有8位由这三类字符组成的密码,公式是
62^8(62=26个小写字母+26个大写字母+10个数字) - 第二步:减去只包含两类字符的组合数:
- 只含小写+大写的组合数:
52^8(52=26+26) - 只含小写+数字的组合数:
36^8(36=26+10) - 只含大写+数字的组合数:
36^8(36=26+10)
- 只含小写+大写的组合数:
- 第三步:把多减去的只含一类字符的组合数加回来(第二步里,全小写的密码被减了两次,全大写、全数字同理,所以要补回来一次):
- 全小写的组合数:
26^8 - 全大写的组合数:
26^8 - 全数字的组合数:
10^8
- 全小写的组合数:
最终计算公式:
符合要求的组合数 = 62^8 - (52^8 + 36^8 + 36^8) + (26^8 + 26^8 + 10^8)
简单来说,容斥原理就是避免重复剔除不符合条件的情况,确保每一类不符合的密码只被减去一次。如果题目没要求必须同时包含三类字符,只是说密码可以使用这三类字符,那你的初始计算是对的;但明确要求三类都有的话,就得按上面的方法修正计算。
内容的提问来源于stack exchange,提问作者compLearner
相关产品推荐
相关产品推荐

