Kleinsten Teiler ohne Rest Berechnen , der nicht < 16 ist

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Kleinsten Teiler ohne Rest Berechnen , der nicht < 16 ist

    Hallo.

    Ich suche nach einer effizienten Möglichkeit von einer unbekannten Zahl (die die Bedingung >= 16 erfüllt)
    den kleinsten Teiler ohne Rest zu finden, der nicht kleiner als 16 ist.

    Weiß jemand, wie man das umsetzen könnte?

    Die Werte werden wohl selten die 3000er Grenze überschreiten.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Daniel Baumert“ ()

    Ich denke, dass du eine komplette Primfaktorzerlegung machen musst. Dan kannst du dir dann die kleinste Zahl > 16 raussuchen bzw. die zu untersuchende Zahl, wenn die Primfaktoren <= 16 sind.

    Z.B.
    18 = 2x3x3 --> der kleinste Teiler > 16 ist die 18
    34 = 2x17 --> der kleinste Teiler < 16 ist 17

    Wenn du nur die Primzahlen > 16 ansiehst, ist z.B. die 18 nicht berechenbar, da es keine Primzahl > 16 gibt, die Teiler von 18 ist.
    So wie ich das verstehe, suchst du einen Teiler, welcher keinen Rest verursacht. Des weiteren muss dieser Teiler mindestens 16 sein. Stimmt das so? Wenn ja, wäre das hier ne gute Methode denke ich:

    C#-Quellcode

    1. for (int i = 16; i <= value; i++)
    2. {
    3. if (value % i == 0)
    4. {
    5. //Teiler gefunden
    6. }
    7. }

    Dieser Code ließe sich ohne weiteres nach VB umschreiben, ansonsten kannst du auch einen Converter benutzen. Ich hab auch mal ein paar Tests gemacht:
    zufällige Achtstellige Zahlen brauchen durchschnittlich 4 Millisekunden, um einen Teiler zu finden, bei Achtstelligen Primzahlen sind es 41 Millisekunden. Von der Performance sollte das nicht wirklich zu schlagen sein.
    @Daniel Baumert Pack Dir die betreffenden Primzahlen in eine List(Of Integer) und mach mit For Each davon den Test.
    Diese List(Of Prim) kannst Du auch locker abspeichern und wieder laden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!