Given a list of all composite numbers below 1000, how many will remain after erasure of numbers divisible by 2,3 or 5?
Rem1: "or" is inclusive i.e. and/or.
Rem2: number 1 is neither prime nor composite, so it does not appear on the initial list.
There are 100:
49 77 91 119 121 133 143 161 169 187 203 209 217 221 247 253 259 287 289 299 301 319 323 329 341 343 361 371 377 391 403 407 413 427 437 451 469 473 481 493 497 511 517 527 529 533 539 551 553 559 581 583 589 611 623 629 637 649 667 671 679 689 697 703 707 713 721 731 737 749 763 767 779 781 791 793 799 803 817 833 841 847 851 869 871 889 893 899 901 913 917 923 931 943 949 959 961 973 979 989
100
DefDbl A-Z
Dim wd(10) As String, w As String, sz, crlf$
Function mform$(x, t$)
a$ = Format$(x, t$)
If Len(a$) < Len(t$) Then a$ = Space$(Len(t$) - Len(a$)) & a$
mform$ = a$
End Function
Private Sub Form_Load()
Text1.Text = ""
crlf$ = Chr(13) + Chr(10)
Form1.Visible = True
For n = 2 To 1000
If prmdiv(n) < n Then
If n Mod 2 > 0 And n Mod 3 > 0 And n Mod 5 > 0 Then
Text1.Text = Text1.Text & Str(n)
DoEvents
ct = ct + 1
End If
End If
Next
Text1.Text = Text1.Text & crlf & crlf & ct
End Sub
Function prm(i)
Dim p As Long
Open "17-bit primes.bin" For Random As #111 Len = 4
Get #111, i, p
prm = p
Close 111
End Function
Function prmdiv(num)
Dim n, dv, q
If num = 1 Then prmdiv = 1: Exit Function
n = Abs(num): If n > 0 Then limit = Sqr(n) Else limit = 0
If limit <> Int(limit) Then limit = Int(limit + 1)
dv = 2: GoSub DivideIt
dv = 3: GoSub DivideIt
dv = 5: GoSub DivideIt
dv = 7
Do Until dv > limit
GoSub DivideIt: dv = dv + 4 '11
GoSub DivideIt: dv = dv + 2 '13
GoSub DivideIt: dv = dv + 4 '17
GoSub DivideIt: dv = dv + 2 '19
GoSub DivideIt: dv = dv + 4 '23
GoSub DivideIt: dv = dv + 6 '29
GoSub DivideIt: dv = dv + 2 '31
GoSub DivideIt: dv = dv + 6 '37
Loop
If n > 1 Then prmdiv = n
Exit Function
DivideIt:
Do
q = Int(n / dv)
If q * dv = n And n > 0 Then
prmdiv = dv: Exit Function
Else
Exit Do
End If
Loop
Return
End Function
Function nxtprm(x)
Dim n
n = x + 1
While prmdiv(n) < n
n = n + 1
Wend
nxtprm = n
End Function
|
Posted by Charlie
on 2015-02-18 10:27:51 |