Skip to content

Instantly share code, notes, and snippets.

@majiang
Created August 31, 2012 05:38
Show Gist options
  • Select an option

  • Save majiang/3549386 to your computer and use it in GitHub Desktop.

Select an option

Save majiang/3549386 to your computer and use it in GitHub Desktop.
Rank の計算
Public Function rank (m As ULong(,)) As Integer
' m は size * size 行列
Dim mi As Integer = size - 1
For i As Integer = 0 To size - 1
Dim pj As Integer
pj = -1
While pj < 0
For j As Integer = 0 To size - 1
If m(i, j) Then
pj = j
Exit While
End If
Next
If pj < 0 Then
If mi <= i Then Return i
For j As Integer = 0 To size - 1
m(i, j) = m(mi, j)
m(mi, j) = 0
Next
mi -= 1
End If
End While
Dim f = inverse(m(i, pj))
For j As Integer = 0 To size - 1
If j = pj Then Continue For
For ii As Integer = i + 1 To size - 1
Dim d = (f * m(ii, pj) Mod Ch) * m(i, j) Mod Ch
If m(ii, j) < d Then
m(ii, j) += (Ch - d)
Else
m(ii, j) -= d
End If
' m(ii, j) -= f * m(ii, pj) * m(i, j)
Next
Next
For ii As Integer = i + 1 To size - 1
m(ii, pj) = 0
Next
Next
Return size
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment