Befreundete Zahlen V 1.00

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

ts-soft hat geschrieben:
cxAlex hat geschrieben:Für was zahl ich immer? :twisted:
Für 6?
Jo, aus 49! :mrgreen:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Ne, in Österreich 6 aus 45 ^^
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Beitrag von alter Mann »

falls es jemanden interessiert, es gibt nicht nur befreundete Zahlen

http://www.mathe.tu-freiberg.de/~hebisc ... ahlen.html
Win11 64Bit / PB 6.0
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag 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.
Win11 x64 | PB 6.20
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

> Der Ursprungspost war in nem anderen Forum.

Wir können uns gerne auch dort so toll unterhalten wenn du willst ^^
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Little John

Beitrag 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
Special-Agent-J
Beiträge: 51
Registriert: 05.10.2008 10:13

Beitrag 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
Achtung ich hab leider nur die demo von 4.3 und von der kaufversion leider nur 3.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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: .
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag 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:
Win11 x64 | PB 6.20
Antworten