Clever-Excel-Forum

Normale Version: Primzahl Berechnung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
[attachment=5417]Guten Morgen, 

habe mir nun die letzten drei Tage den Kopf zerbrochen und kam leider immer noch nicht  auf die Lösung.

ich möchte eine Userform erstellen, in die man eine Primzahl über ein Textfeld eingibt, in Textfeld 2 soll dann ein entsprechender Text kommen ob es eine Primzahl ist oder nicht und welche zahl der Kleinste Teiler ist. 

Anbei meinen Code:



Code:
Private Sub CommandButton2_Click()
     Dim x As Double
     Dim prim As Double
     Dim a As Double
     Dim b As Double
     b = 0
     x = Me.TextBox1
     If x = 1 Then
         MsgBox ("Eine Primzahl muß einen Wert über 1 haben")
     Exit Sub
     End If
     For prim = 1 To x
         a = x / prim
         If a = Int(a) Then
             b = b + 1
         End If
     Next

    
     If b > 2 Then
         Me.TextBox2 = x & " ist keine Primzahl!" & vbCr & "Der erste gemeinsamme Teiler ist " & a
         Exit Sub
     Else
         Me.TextBox2 = x & " ist eine Primzahl!"
     End If
End Sub


Das Problem ist ich komme einfach nicht auf den kleinsten Teiler  :05:
Hallo

In Punkto Makro kann ich nicht viel helfen aber es gibt Ungereimtheiten in deiner Anfrage.

Zitat:eine Primzahl über ein Textfeld eingibt
[...]"Der erste gemeinsamme Teiler ist "
[...]welche zahl der Kleinste Teiler ist.
Entweder sucht du den kleinsten Teiler oder den gemeinsamen Teiler.
Für einen gemeinsamen Teiler brauchst du allerdings mindestens zwei Zahlen.
(28.05.2016, 09:50)shift-del schrieb: [ -> ]Hallo

In Punkto Makro kann ich nicht viel helfen aber es gibt Ungereimtheiten in deiner Anfrage.

Zitat:eine Primzahl über ein Textfeld eingibt
[...]"Der erste gemeinsamme Teiler ist "
[...]welche zahl der Kleinste Teiler ist.
Entweder sucht du den kleinsten Teiler oder den gemeinsamen Teiler.
Für einen gemeinsamen Teiler brauchst du allerdings mindestens zwei Zahlen.

ich habe  ein Feld in das man eine Zahl einträgt 

z.B.  27


danach soll im zweiten Feld stehen:

27 ist keine Primzahl der erste ganzzahlige Teiler ist 3
Hallo,

für Deine erste Aufgabe guckst Du hier:

http://excelformeln.de/formeln.html?welcher=129

Zweite Aufgabe dürfte hiermit erschlagen werden:

http://excelformeln.de/formeln.html?welcher=167
(28.05.2016, 13:25)BoskoBiati schrieb: [ -> ]Hallo,

für Deine erste Aufgabe guckst Du hier:

http://excelformeln.de/formeln.html?welcher=129

Zweite Aufgabe dürfte hiermit erschlagen werden:

http://excelformeln.de/formeln.html?welcher=167

Hallo,

Danke für deine Antwort, aber leider muss das ganze über VBA programmiert werden und nicht über excel Formeln.

Liebe Grüße 

Marco
(28.05.2016, 13:25)BoskoBiati schrieb: [ -> ]Hallo,

für Deine erste Aufgabe guckst Du hier:

http://excelformeln.de/formeln.html?welcher=129

Zweite Aufgabe dürfte hiermit erschlagen werden:

http://excelformeln.de/formeln.html?welcher=167
Also Leute es Läuft!!!!!!!!!

Hier ist der Code:

Code:
Private Sub CommandButton2_Click()

     Dim x As Double
     Dim prim As Double
     Dim a As Double
     Dim b As Double
     b = 0
     x = Me.TextBox1
     If x = 1 Then
         MsgBox ("Eine Primzahl muß einen Wert über 1 haben")
     Exit Sub
     End If
     For prim = 2 To x
         a = x / prim
         If a = Int(a) Then
             b = b + 1
             Exit For
             
         End If
     Next
Debug.Print a & "A"
Debug.Print x & "x"
Debug.Print b & "b"
Debug.Print prim & "prim"

     If prim > 2 Then
         Me.TextBox2 = x & " ist keine Primzahl !" & vbCr & "Der erste ganzzahlige Teiler ist " & prim
         Exit Sub
     Else
         Me.TextBox2 = (x & " ist eine Primzahl")
     End If
End Sub

'es war nur die Variable für die If Anweisung falsch anstatt B hätte es Prim sein müssen :)
Code:
Sub M_snb()
    y = 23


    For j = 3 To y Step 2
      If y Mod j = 0 Then Exit For
    Next

    MsgBox y & " ist " & IIf(j = y, "", "k") & "ein Primzahl"
End Sub
Hallo,

dann eher so:


Code:
Sub M_snb()
Dim y As Long
Dim j As Long
    y = Cells(1, 1)
    For j = 3 To y Step 2
      If y Mod j = 0 Then Exit For
    Next
    MsgBox y & " ist " & IIf(j = y, "", "k") & "eine Primzahl" & IIf(j <> y, ", Teiler: " & j, "")
End Sub
Hi,

anbei noch weniger Durchläufe und Fehlerbehandlung :)
[attachment=5436]
Hallo,

das Makro von snb braucht, je nach Größe der Zahl 16-17s, das des TE mehr als die dreifache Zeit und bringt ein falsches Ergebnis!:


Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDE
1600000001snb 16988Bosko 0Func 0TE 54725
2Primzahl600000001 ist keine Primzahl !

Der erste ganzzahlige Teiler ist 600000001
   
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Schneller geht es damit:

Code:
Private Sub M_bosko()
Dim y As Double
Dim j As Double
Dim x As Long
Dim bol As Boolean
bol = False
    y = Cells(1, 1)
    x = Int(Sqr(y))
    For j = 3 To x Step 2
      If y Mod j = 0 Then bol = True: Exit For
    Next
    MsgBox y & " ist " & IIf(bol = False, "", "k") & "eine Primzahl" & IIf(bol = True, ", Teiler: " & j, "")
End Sub