Seite 2 von 2

Verfasst: 02.01.2009 21:27
von rolaf
ts-soft hat geschrieben:
cxAlex hat geschrieben:Für was zahl ich immer? :twisted:
Für 6?
Jo, aus 49! :mrgreen:

Verfasst: 02.01.2009 21:28
von cxAlex
Ne, in Österreich 6 aus 45 ^^

Verfasst: 02.01.2009 23:30
von alter Mann
falls es jemanden interessiert, es gibt nicht nur befreundete Zahlen

http://www.mathe.tu-freiberg.de/~hebisc ... ahlen.html

Verfasst: 03.01.2009 15:02
von Andesdaf
toll dass ihr euch so fein zum Thema unterhalten habt. :wink:
Der Ursprungspost war in nem anderen Forum. Und da wollt ich es jetzt auch
mal hier posten.

Verfasst: 03.01.2009 15:04
von cxAlex
> Der Ursprungspost war in nem anderen Forum.

Wir können uns gerne auch dort so toll unterhalten wenn du willst ^^

Verfasst: 03.01.2009 18:01
von Little John
Nur mal so nebenbei etwas zum Thema ... ;-)

2Andesdaf:
Für einen Beitrag im Abschnitt "Code, Tipps und Tricks" lohnen sich IMHO doch einige Verbesserungen. ;-)
Hier einiges, das mir auf den ersten Blick aufgefallen ist:

a) Du benutzt den Befehl OpenConsole nicht richtig. Er gehört nicht in die Schleife, sondern ganz an den Anfang der Ausgabe. Wenn man das Programm so wie es momentan ist startet und für die Grenzen des Zahlenbereichs beispielsweise 100 und 200 eingibt, bekommt man eine Fehlermeldung.

b) Die Prozedur IsTeiler() wird nicht benötigt, dafür hat PB den Mod-Operator.

c) Wegen des Programmierstils, und weil solche Berechnungen bei größeren Zahlen lange dauern können, ist es nicht empfehlenswert die Berechnungen doppelt auszuführen. Im Moment ermitteln die Prozeduren SummeAllerTeiler() und AusgabeAllerTeiler() beide jeweils die Teiler der als Argument übergebenen Zahl -- die erste Prozedur addiert sie dann, die zweite erzeugt einen String aus ihnen.
Bei "Mehrfachbenutzung" ist viel besser: Die Teiler nur 1x ermitteln und für die spätere Verwendung speichern. Danach kann man sie dann bequem und zeitsparend addieren, auflisten oder was immer.

d) Der Algorithmus zum Ermitteln der Teiler kann effektiver (d.h. schneller) gestaltet werden.

Hier ist ein kleiner Beispielcode, der die obigen Punkte b) bis d) berücksichtigt:

Code: Alles auswählen

EnableExplicit

Procedure ProperDivisors (n, List divisor())
   ; liefert alle *echten* Teiler von n (d.h. alle ohne n selbst)
   ; in der verknüpften Liste divisor()
   Protected k

   ClearList(divisor())   
   If n < 2
      ProcedureReturn
   EndIf

   AddElement(divisor())
   divisor() = 1
   If n % 2 = 0
      For k = 2 To n/2
         If n % k = 0
            AddElement(divisor())
            divisor() = k
         EndIf
      Next
   Else
      ; In diesem Fall brauchen wir nur ungerade Teiler zu suchen:
      For k = 3 To Int(n/3) Step 2
         If n % k = 0
            AddElement(divisor())
            divisor() = k
         EndIf
      Next
   EndIf
EndProcedure


;-- Demo
Define n, last, sum.q
Define temp.s
NewList teiler()

Debug "Summe der echten Teiler von ..."
Debug ""
For n = 2 To 20
   ProperDivisors(n, teiler())
   last = ListSize(teiler()) - 1
   temp = ""
   sum = 0
   ForEach teiler()
      temp + Str(teiler())
      If ListIndex(teiler()) < last
         temp + "+"
      EndIf 
      sum + teiler()
   Next
   Debug Str(n) + ": " + temp + " = " + Str(sum)
Next
Gruß, Little John

Verfasst: 05.01.2009 22:05
von Special-Agent-J
kranke scheiße was sind befreundete zahlen xD
gibts dann auch verfeindetete zahlen? :D

na ja trotzdem der code war bestimmt nicht ganz leicht zu schreiben
nice work allein schon zu verstehen was befreundete zahlen sind

p.s. hab bei wikipedia nach 2 zeilen augehört zu lesen was isn das für ne komplizierte scheiße

Verfasst: 05.01.2009 22:40
von Kaeru Gaman
so kleiner, du tust jetzt fünf euro in die kaffekasse...

zweimal in einem posting scheiße sagen darf man erst ab einundzwanzig.

Verfasst: 06.01.2009 11:25
von DarkDragon
cxAlex hat geschrieben:Ne, in Österreich 6 aus 45 ^^
Hä.. wie jetz? Ich glaub ich spiel in Österreich auch mal Lotto, da gibts bessere Chancen :lol: .

Verfasst: 11.01.2009 11:42
von Andesdaf
@Spezialagent: Ja, musste mich auch erst mal reinlesen, aber nicht in Wiki
sondern woanderes wo die Sprache etwas verständlicher war.

@Kaeru: ist das das Forenschutzgesetz? :mrgreen:

@Little John: Danke für die Verbesserung des Codes :) :allright: