1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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)即可判断>
发表评论