58 lines
1.2 KiB
Plaintext
58 lines
1.2 KiB
Plaintext
' FreeBASIC v1.05.0 win64
|
|
|
|
Function SumBinaryDigits(number As Integer) As Integer
|
|
If number < 0 Then number = -number ' convert negative numbers to positive
|
|
Var sum = 0
|
|
While number > 0
|
|
sum += number Mod 2
|
|
number \= 2
|
|
Wend
|
|
Return sum
|
|
End Function
|
|
|
|
Function IsPrime(number As Integer) As Boolean
|
|
If number <= 1 Then
|
|
Return false
|
|
ElseIf number <= 3 Then
|
|
Return true
|
|
ElseIf number Mod 2 = 0 OrElse number Mod 3 = 0 Then
|
|
Return false
|
|
End If
|
|
Var i = 5
|
|
While i * i <= number
|
|
If number Mod i = 0 OrElse number Mod (i + 2) = 0 Then
|
|
Return false
|
|
End If
|
|
i += 6
|
|
Wend
|
|
Return True
|
|
End Function
|
|
|
|
Function IsPernicious(number As Integer) As Boolean
|
|
Dim popCount As Integer = SumBinaryDigits(number)
|
|
Return IsPrime(popCount)
|
|
End Function
|
|
|
|
Dim As Integer n = 1, count = 0
|
|
Print "The following are the first 25 pernicious numbers :"
|
|
Print
|
|
|
|
Do
|
|
If IsPernicious(n) Then
|
|
Print Using "###"; n;
|
|
count += 1
|
|
End If
|
|
n += 1
|
|
Loop Until count = 25
|
|
|
|
Print : Print
|
|
Print "The pernicious numbers between 888,888,877 and 888,888,888 inclusive are :"
|
|
Print
|
|
For n = 888888877 To 888888888
|
|
If IsPernicious(n) Then Print Using "##########"; n;
|
|
Next
|
|
Print : Print
|
|
Print "Press any key to exit the program"
|
|
Sleep
|
|
End
|