Imports System.IO
Module Module1
Dim fs As New FileStream("pt.bin", FileMode.OpenOrCreate)
Sub Main()
For i As Long = 1 To UInt32.MaxValue / 8
fs.WriteByte(255)
Next
WriteBool(0, False)
WriteBool(1, False)
'13
For i As Long = 2 To UInt32.MaxValue
If ReadBool(i) AndAlso UInt32.MaxValue / i < i Then '防止溢出
For j As Long = i * i To UInt32.MaxValue Step i '据说i*i比i*2快一点儿
WriteBool(j, False)
Next
End If
Next
Console.WriteLine("{0}", ReadBool(UInt32.MaxValue))
'Console.ReadKey()
End Sub
Sub WriteBool(v As Long, b As Boolean)
If v > UInt32.MaxValue OrElse v < 0 Then
Return
End If
fs.Seek(v >> 3, SeekOrigin.Begin)
Dim byt = fs.ReadByte()
If byt = -1 Then
byt = 0
End If
If b Then
byt = byt Or 1 << (v Mod 8)
Else
byt = byt And Not (1 << (v Mod 8))
End If
fs.Seek(v >> 3, SeekOrigin.Begin)
fs.WriteByte(byt)
End Sub
Function ReadBool(v As Long) As Boolean
If v > UInt32.MaxValue OrElse v < 0 Then
Throw New Exception()
End If
fs.Seek(v >> 3, SeekOrigin.Begin)
Return (fs.ReadByte() >> (v Mod 8)) And 1
End Function
End Module
然后生成好之后ReadBool(x)即可判断>

发表评论