'teilweise von Winfried Radner 'e-mail: Wolf.W.Radzinski@onlinehome.de Sub prim() start = Timer Columns("B:B").Select Selection.ClearContents Range("A1").Select a = Range("a1").Value e = Range("a2").Value z = 1 If a <= 2 Then If a = 2 Then Range("b1").Value = 2 z = 2 End If If a = 1 Then Range("b1").Value = 1 Range("b2").Value = 2 z = 3 End If If a = 0 Then Range("b1").Value = 0 Range("b2").Value = 1 Range("b3").Value = 2 z = 4 End If End If For i = a To e For ii = 2 To (i - 1) p = i / ii - Fix(i / ii) If p = 0 Then Exit For Next ii If p = 0 Then GoTo raus Range("b" & z).Value = i Application.StatusBar = i z = z + 1 raus: Next i Cells(3, 1).Value = Timer - start End Sub Sub prim2() start1 = Timer Columns("C:C").Select Selection.ClearContents Range("A1").Select a = Range("a1").Value e = Range("a2").Value z = 1 If a <= 2 Then If a = 2 Then Range("c1").Value = 2 z = 2 End If If a = 1 Then Range("c1").Value = 1 Range("c2").Value = 2 z = 3 End If If a = 0 Then Range("c1").Value = 0 Range("c2").Value = 1 Range("c3").Value = 2 z = 4 End If End If If ((a / 2) - Fix(a / 2)) = 0 Then a = a + 1 If ((e / 2) - Fix(e / 2)) = 0 Then e = e - 1 'die einzige gerade Primzahl ist die ZWEI! '3 wird extra behandelt If a <= 3 Then Range("c" & z).Value = 3 Application.StatusBar = 3 z = z + 1 If e > 5 Then a = a + 2 End If For i = a To e Step 2 'prüfe nur noch ungerade Zahlen! bei geraden Zahlen ist prüfen sinnlos! iii = Fix(Sqr(i) + 1) 'und jeweils nur bis zur Wurzel prüfen (wichtig! da besonders zeitkritisch) For ii = 3 To iii Step 2 'auch hier muß ich nicht durch gerade Zahlen teilen! p = i / ii - Fix(i / ii) If p = 0 Then Exit For Next ii If p = 0 Then GoTo raus Range("c" & z).Value = i Application.StatusBar = i z = z + 1 raus: Next i Cells(4, 1).Value = Timer - start1 End Sub Sub teste_auf_gleich() Columns("D:D").Select Selection.ClearContents Columns("b:b").Select x = 0 For Each z In Selection If IsEmpty(z) Then Exit For y = Selection(z.Row).Offset(0, 1) If z <> y Then Selection(z.Row).Offset(0, 2) = "!!!!!" x = x + 1 End If Range("A8").Value = x Next End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Target.Address = "$A$5" Then prim If Target.Address = "$A$6" Then prim2 If Target.Address = "$A$7" Then teste_auf_gleich End Sub