Feedback

Kleinster natürlicher Teiler > 1

Sprache: VB

Dieses Snippet ermittelt den kleinsten natürlichen Teiler > 1 einer ganzen Zahl n. Für gerade n ist der Rückgabewert stets 2.
Function sm_div(ByVal n As Integer) As Integer
    For Each p As Byte In {2, 3, 5}
        If n Mod p = 0 Then Return p
    Next

    Dim dif As Byte() = {6, 4, 2, 4, 2, 4, 6, 2}, m As Short = 7, i As Short = 1

    While m * m <= n
        If n Mod m = 0 Then Return m
        m += dif(i Mod 8)
        i += 1
    End While

    Return n
End Function
Function sm_div(ByVal n As Integer) As Integer
    For Each p As Byte In {2, 3, 5}
        If n Mod p = 0 Then Return p
    Next

    Dim dif As Byte() = {6, 4, 2, 4, 2, 4, 6, 2}, m As Short = 7, i As Short = 1

    While m * m <= n
        If n Mod m = 0 Then Return m
        m += dif(i Mod 8)
        i += 1
    End While

    Return n
End Function

2 Kommentare

  1. Die Überschrift und die Lösung ist ein wenig eigenartig. Kleinster gemeinsamer Teiler ist hierbei immer die 1. Wozu benötigt man den kleinsten gemeinsamen Teiler, der nicht 1 ist?

  2. 1 ausgeschlossen natürlich. Ist selten von Nöten, stimmt, aber wer’s braucht, hat’s nun hier. Beispielsweise verwende ich diese Funktion beim ermitteln der Primfaktorzerlegung (folgt in Kürze als Snippet).