Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 26
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Effizientere Primzahlprüfung großer Zahlen


Autor: Klemens Nanni
Sprache: VB.NET
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 4509
  
Kick it on dotnet-kicks.de  

Beschreibung:

Mit dieser Funktion lässt sich eine Menge großer Primzahlen weitaus schneller berechnen. Zum Vergleich:

Slow: 664579 primes < 10^7 computed in 00:08.6306629

Fast: 664579 primes < 10^7 computed in 00:05.2659327

Slow: 5761455 primes < 10^8 computed in 04:52.4940141

Fast: 5761455 primes < 10^8 computed in 03:07.4373887

mm:ss.ms


Abgelegt unter: Primzahl, prime, prüfen, proof, check, Zahl, Number, Integer.



Visual Basic
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
Function Slow(ByVal n As Integer) As Boolean
    If n Mod 2 = 0 OrElse n Mod 3 = 0 OrElse n Mod 7 = 0 OrElse n Mod 5 = 0 Then Return False

    For i As Short = 11 To Math.Sqrt(n) Step 2
        If n Mod i = 0 Then Return False
    Next

    Return True
End Function

Function Fast(ByVal n As Integer) As Boolean
    If n Mod 2 = 0 OrElse n Mod 3 = 0 OrElse n Mod 7 = 0 OrElse n Mod 5 = 0 Then Return False

    Dim r As Single = Math.Sqrt(n), f As Short = 11
    If r Mod 1 = 0 Then Return False

    While f <= r
        If n Mod f = 0 Then Return False
        f += 2
        If n Mod f = 0 Then Return False
        f += 4
    End While

    Return True
End Function
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Firendeath schrieb am:  09.04.2010 09:06:30

... schöne Sache.
Ausser das die Bedingung "5 = 0" nie zutrifft.
Müsste das dann nicht eher "n Mod 5 = 0" sein ?

Also so...

Function Slow(ByVal n As Integer) As Boolean
If n Mod 2 = 0 OrElse n Mod 3 = 0 OrElse n Mod 7 = 0 OrElse n Mod 5 = 0 Then Return False

For i As Short = 3 To Math.Sqrt(n) Step 2
If n Mod i = 0 Then Return False
Next

Return True
End Function

Function Fast(ByVal n As Integer) As Boolean
If n Mod 2 = 0 OrElse n Mod 3 = 0 OrElse n Mod 7 = 0 OrElse n Mod 5 = 0 Then Return False

Dim r As Short = Math.Sqrt(n), f As Short = 5
While f <= r
If n Mod f = 0 OrElse n Mod (f + 2) = 0 Then Return False
f += 6
End While

Return True
End Function


Lg Firen
Klemens Nanni schrieb am:  09.04.2010 22:59:51

Jup, ist ein Tippfehler gewesen. Danke (:
Klemens Nanni schrieb am:  15.04.2010 19:48:37

die Funktion 'Fast' wurde durch Zeile 15 nochmals beschleunigt. Denn ist die Wurzel eine natürliche Zahl, so hat n mehr als zwei Teiler & kann keine Primzahl sein.


Diese Snippets könnten für Sie interessant sein:
[C#] Prüfen ob eine Zahl eine Primzahl ist
[C#] PrimeNumberGenerator
[C#] PrimeNumberReader
[C#] Integers
[C#] Primzahl berechnen (optimiert)
[VB.NET] Das Sieb des Eratosthenes
[VB.NET] Das Sieb von Atkin
[VB.NET] Primfaktorzerlegung
[VB.NET] Das Sieb von Atkin (2)
[VB.NET] Das Sieb von Atkin (2) - aktuell
[C#] prüfen ob String eine gültige IP ist
[C#] String auf Emailadresse prüfen
[C#] Windows Passwort überprüfen [Übersetzung]
[C#] Prüfen, ob exklusiver Zugriff auf eine Access-DB möglich ist
[ASP.net] Datei nach Bildupload prüfen
[C#] Kollision von zwei rechteckigen Objekten prüfen
[C#] Prüfen, ob eine Datei ausfürbar ist (.exe, .bat, etc.)
[C#] String auf erlaubte Zeichen prüfen
[C#] Prüfen ob aktueller Benutzer Administrator ist
[C#] Herausfinden, ob ein Programm (ProgramName) installiert ist.
[C#] Property auf Attribute prüfen Property.HasAttribute
[VB.NET] Permutation nachweisen
[VB.NET] Pandigitale Zahlen
[C#] Prüfung, ob bestimmtes Bit in Byte gesetzt ist.
[C#] Setzt ein bestimmtes Bit in einem Byte
[C#] Prüfen, ob Teil des .NET Frameworks
[C#] Programm RUN Check
[C#] prüfen ob eine Zahl gerade ist
[C#] Prüfen ob ein Text eine Zahl ist
[C#] Erweiterung für Stringumwandlungen
[C#] Beliebiges Zahlensystem in Dezimal umrechnen
[C#] Dezimalzahl in beliebiges Zahlensystem umrechnen
[VB.NET] Zahl mit Dezimalzahlstellen formatieren
[C#] Prüfung auf narzisstische Zahlen
[C#] Herausfinden, ob ein Character eine Zahl ist.
[VB.NET] Fibonacci-Folge iterativ erzeugen
[C#] Nummernformate beim Parsen fix festlegen
[C#] Create Directory
[VB.NET] Zahlen als Binär darstellen
[C#] IsPositiveInteger as Extension Method
[VB.NET] IsPositivNummeric
[C#] Integer Rotate Left/Right
[VB.NET] Ganzzahlige Wurzel

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.