Optimierung einer kleinen Funktion
-
Ok, A ist eine Zahl.
Den Ggt suche ich nicht. Dachte das ist nur der Schlüssel zur Lösung!?
-
Arcoth schrieb:
Wie kann eine Zahl eine Menge sein?
Von Neumann lässt grüssen.
-
Macht es denn einen großen Unterschied bei der Lösung. A=100 könnte doch eine Menge von 100 Elementen bedeuten die ich aufteilen möchte.
-
Wozu
unsigned long int C=B;
?
Entweder habe ich call by value nicht verstanden oder du.
-
Eigentlich ist es nur ein Minimalbeispiel und ich dachte es passt gut zur Frage.
Danke für den Hinweis!
-
Ok, aktueller Stand:
unsigned long int C(unsigned long int A, unsigned long int B){ while(((A/B)*B)!=A){ --B; } return B; }
-
Scheint als wäre das nicht so simpel. Werde mich mal mit Primfaktorzerlegung beschäftigen.
Hat noch jemand Stichworte zu Themen die bei einer Lösung helfen könnten?
Danke.
Mathe4+
-
Mathe4+ schrieb:
Ok, aktueller Stand:
unsigned long int C(unsigned long int A, unsigned long int B){ while(((A/B)*B)!=A){ --B; } return B; }
unsigned long int C(unsigned long int A, unsigned long int B){ while(A%B){ --B; } return B; }
-
Super, danke!
Hatte deinen ersten Hinweis nicht richtig verstanden.
-
Mathe4+ schrieb:
Super, danke!
Hatte deinen ersten Hinweis nicht richtig verstanden.
Jetzt gibt es noch einen Optimierungstrick:
- Das Divisionsergebnis durch den größten Teiler ist der kleinste Teiler und umgekehrt.
- Die Differenz zweier benachbarter Teiler wird größer, wenn die Teiler größer werden.Die Suche nach 'nem kleinen Teiler ist daher schneller wie die Suche nach 'nem großen Teiler.
Jetzt viel Spaß beim Entwerfen des notwendigen Algoritmus.
VG