使用阶乘查找组合

时间:2018-10-30 01:17:32

标签: vb.net algorithm math recursion combinations

因此,这是一个分为两个部分的问题,但是基于同一项目。我正在尝试编写一个小程序,以说明计算机如何使用蛮力攻击快速破解密码。它只有三个输入:一个用于表示是否应使用整数的复选框,一个用于表示是否应使用字母的复选框,以及一个用于输入要破解的密码的文本框。然后输出组合数。这是我的代码:

dim a,b,c,d,P as double
'Using the following formula:
'P(n,r) = n!/(r!(n-r)!)
'Let's assume we are just using numbers, so n = 10
'r = the count of characters in the textbox.

a = factorial(n)
b = factorial(r)
c = (n - r)
d = factorial(c)
P = a / (b * d)
Output = "With a password of " & r & " characters and " & n & " possible values, the number of combinations are " & P 
Me.RichTextBox1.Text = Output & vbCrLf

Function factorial(ByVal n As Integer) As Integer
     If n <= 1 Then
        Return 1
     Else
        Return factorial(n - 1) * n
     End If
End Function

所以,假设我只看0-9个字符,密码中包含以下字符数,我得到:

P(10,1) = 10!/(1! * (10-1)!) = 10
P(10,2) = 10!/(2! * (10-2)!) = 45
P(10,3) = 10!/(3! * (10-3)!) = 120
P(10,4) = 10!/(4! * (10-4)!) = 210
P(10,5) = 10!/(5! * (10-5)!) = 252
P(10,6) = 10!/(6! * (10-6)!) = 210
P(10,7) = 10!/(6! * (10-7)!) = 120

一旦超过5,您会看到组合数量下降了。我认为这是正确的,但是想在介绍之前进行检查。这是因为样本总数增加时池中的总数保持不变吗?

我的第二个问题是关于如何考虑破解重复数字的密码。再次,让我们假设我们只是从数字0-9拉出。如果样本大小为两个(假设为15),那么有45种可能的组合,对吗?但是,如果他们输入55,该怎么办?还有45种组合吗?我想计算机仍然需要遍历每种可能的组合,因此仍然会考虑45种可能性吗?

0 个答案:

没有答案