Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » Python: dynamisch Container/Listen von Primzahlketten bilden
Druckversion
Druckversion
Antworten
Antworten
Autor
Schule Python: dynamisch Container/Listen von Primzahlketten bilden
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-11-23


Hallo


Ich habe jetzt ein Tool geschrieben, welches innerhalb der voreingestellten Grenzen jede Zahl einer arithm. Reihe bildet, nachsieht, ob sie PZ oder ZZ, und dann auch nachsieht, ob die nächste wieder PZ oder ZZ, u.s.w. Es zählt praktisch die Ketten.

Hier ein Ausdruck (wobei kl = Kettenlänge, gpzkl = größte PrimZahlKettenLänge, gzzkl = größte ZusammengesetzteZahlKettenLänge, in eckigen Klammern ist jeweils der kleinste nichttriviale Teiler.
Nr: 95 2833 [] kl 2 gpzkl 5 gzzkl 4 5
Nr: 96 2863 [7] kl 1 gpzkl 5 gzzkl 4 5
Nr: 97 2893 [11] kl 2 gpzkl 5 gzzkl 4 5
Nr: 98 2923 [37] kl 3 gpzkl 5 gzzkl 4 5
Nr: 99 2953 [] kl 1 gpzkl 5 gzzkl 4 5
Nr: 100 2983 [19] kl 1 gpzkl 5 gzzkl 4 5
Nr: 101 3013 [23] kl 2 gpzkl 5 gzzkl 4 5
Nr: 102 3043 [17] kl 3 gpzkl 5 gzzkl 4 5
Nr: 103 3073 [7] kl 4 gpzkl 5 gzzkl 4 5
Nr: 104 3103 [29] kl 5 gpzkl 5 gzzkl 5 5
Nr: 105 3133 [13] kl 6 gpzkl 5 gzzkl 6 6
Nr: 106 3163 [] kl 1 gpzkl 5 gzzkl 6 6
Nr: 107 3193 [31] kl 1 gpzkl 5 gzzkl 6 6
Nr: 108 3223 [11] kl 2 gpzkl 5 gzzkl 6 6

Ich möchte jetzt, daß das Tool
1. auch die Anzahl der Ketten, nach Länge sortiert, speichert, das er also am Ende noch eine solche Zeile ausgibt: "Im Abschnitt von x bis y befinden sich z.B x 4 1-er Ketten, 8 2-er Ketten, 22 dreier Ketten usw. usf.
2. Und dann soll er noch zu jeder Kettenlängen die Startpunkte in eine extra Liste schreiben, die ich auch mir in Excel wiedergebe lasse am Ende. Das kriege ich aber selber hin, ist nicht das Problem.

Das Problem ist, daß ich die Kettenlängen-Liste und Variable für die Anzahl der Kettenlängen, nicht fest vorgeben will. Der Knackpunkt ist: Das Programm soll nach Bedarf, wenn eine neue Kettenlänge daherkommt, dynamisch selbst den Containerbilden und den Containernamen vergeben, z.b. kl17, kl18, kl19  u.s.w., wo er die Startpunkte sammelt. Die Anzahl kann ich dann über len abgreifen...


Gehen tut das, weiss bloß nicht wie. Wer kann mir da weiter helfen?

Mir fällt auf, ich weiß nicht mal, wie man das Problem richtig nennt. Da kann ich ja im netz auch nichts finden!

Schon mal Danke im Voraus ...


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 364
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-11-23


Hallo Bekell,

du steckst ziemlich tief in der Thematik drinnen. Kannst du das Problem auf einen einfachen Sachverhalt reduzieren?

Am besten du gibst auch gleich ein Beispiel. Ansonsten macht der folgende Code möglicherweise das, was du brauchst:
Javascript
const listOf primeChains = []
 
while (true) {
  const primeChain = getNextPrimeChain()
  if (primeChain === null) break
  const indexOfThatPrimeChain = primeChains.findIndex(e=>e.lengthOfChain === primeChain.length)
  if (indexOfThatPrimeChain) {
    primeChains[indexOfThatPrimeChain].chains.push(primeChain)
  } else {
    primeChains.push({
      lengthOfChain: primeChain.length,
      chains: [primeChain] 
    })
  }
}



Wahlurne Für Scynja bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2020-11-24


Es fehlt eine genaue Problembeschreibung, was deine Funktion/Prozedur machen soll.


Was ist die Eingabe und gewünschte Ausgabe? (Datentypen und Funktionalität)
Wie sieht ein einfaches Beispiel aus?




-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2020-11-24


2020-11-24 08:42 - DerEinfaeltige in Beitrag No. 2 schreibt:
Es fehlt eine genaue Problembeschreibung, was deine Funktion/Prozedur machen soll.
Was ist die Eingabe und gewünschte Ausgabe? (Datentypen und Funktionalität)
Wie sieht ein einfaches Beispiel aus?

Hallo Einfältiger, Danke daß Du Dich meldest.
Ich möchte, daß mein Programm zu der obigen Ausgabe noch folgendes am Ende meldet.

A: Im Abschnitt x bis y gibt es
23 Primzahlketten der Länge 1
27 Primzahlketten  der Länge 2
23 Primzahlketten  der Länge 3
0 Primzahlketten der Länge 4
23 Primzahlketten der Länge 5
27 Primzahlketten  der Länge 6

B Im Abschnitt x bis y gibt es
3 Ketten zusammengesetzter Zahlen der Länge 1
etc. etc.

Ich will jetzt nicht selber soviel Variablen definieren, sondern er soll die notwendigen selber definierten und logisch benennen.
Python
  1. from openpyxl import Workbook
  2. from sympy.ntheory import isprime
  3. from math import sqrt
  4.  
  5.  
  6. wb = Workbook()
  7. Start=13
  8. Grenze=10000
  9. Abstand=30
  10. geszz_zähler=0
  11. gespz_zähler=0
  12. pz_zähler=0
  13. zz_zähler=0
  14. zahl="pz"
  15. ketten_länge=0
  16. pz_kettenlänge=0
  17. zz_kettenlänge=0
  18. pz_kettennrzähler=0
  19. zz_kettennrzähler=0
  20. vor_zahl="pz"
  21. größte_kettenlänge=0
  22. größte_pzkettenlänge=0
  23. größte_zzkettenlänge=0
  24. nr=0
  25. def ermittel_primteiler(x):
  26. primteiler_liste=[]
  27. y=int(sqrt(x))
  28. #for i in range(3,x//2,2):
  29. for i in range(3,y,2):
  30. if x%i==0 and isprime(i):
  31. primteiler_liste.append(i)
  32. return(primteiler_liste)
  33.  
  34. #ws=wb.active
  35. #ws.append(["Nr","Zahl","PT Zahl","Anzahl PT","Zahl a","PT a","Anzahl PTa","PZ b","PZ a",])
  36. for n in range(Start,Grenze,Abstand):
  37. nr=nr+1
  38. if isprime(n) and vor_zahl=="pz":
  39. gespz_zähler=gespz_zähler+1
  40. ketten_länge=ketten_länge+1
  41. pz_kettenlänge=pz_kettenlänge+1
  42. zahl="pz"
  43. if isprime(n) and vor_zahl=="zz":
  44. gespz_zähler=gespz_zähler+1
  45. ketten_länge=1
  46. pz_kettenlänge=1
  47. pz_kettennrzähler=pz_kettennrzähler+1
  48. zahl="pz"
  49.  
  50. if not isprime(n) and vor_zahl=="pz":
  51. geszz_zähler=geszz_zähler+1
  52. ketten_länge=1
  53. zz_kettenlänge=1
  54. zz_kettennrzähler=zz_kettennrzähler+1
  55. zahl="zz"
  56. if not isprime(n) and vor_zahl=="zz":
  57. ketten_länge=ketten_länge+1
  58. zz_kettenlänge=zz_kettenlänge+1
  59. zahl="zz"
  60. if ketten_länge>größte_kettenlänge:
  61. größte_kettenlänge=größte_kettenlänge+1
  62. if pz_kettenlänge>größte_pzkettenlänge:
  63. größte_pzkettenlänge=größte_pzkettenlänge+1
  64. if zz_kettenlänge>größte_zzkettenlänge:
  65. größte_zzkettenlänge=größte_zzkettenlänge+1
  66.  
  67.  
  68. print("Nr:",nr,n,ermittel_primteiler(n),"kl",ketten_länge,"gpzkl",größte_pzkettenlänge,"gzzkl",größte_zzkettenlänge, größte_kettenlänge)
  69. vor_zahl=zahl




-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, vom Themenstarter, eingetragen 2020-11-24


2020-11-23 23:04 - Scynja in Beitrag No. 1 schreibt:
Hallo Bekell,
du steckst ziemlich tief in der Thematik drinnen. Kannst du das Problem auf einen einfachen Sachverhalt reduzieren?

Hallo Scynia,

Dein Programm funktioniert bei mir nicht. Er sagt:


Das off hab ich schon entfernt, er hat es auch bemängelt. Ich sehe bei Dir auch gar keine Bibliotheken ...??



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2020-11-24


Ich wiederhole:

Was ist die Eingabe und gewünschte Ausgabe? (Datentypen und Funktionalität)
Wie sieht ein einfaches Beispiel aus?



Dein Post spricht übrigens von einer arithmetischen Reihe, deine for-Schleife durchläuft allerdings eine arithmetische Folge.


Dein Codebeispiel lässt vermuten, dass du einen Startwert, eine Schrittweite und eine Obergrenze vorgibst.

Was genau soll die Rückgabe sein?
Rechne es doch an einem einfachen Beispiel (Startwert 3, Schrittweite 4, Obergrenze 24 oder wie auch immer) von Hand vor!


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, vom Themenstarter, eingetragen 2020-11-24


2020-11-24 10:08 - DerEinfaeltige in Beitrag No. 5 schreibt:
Ich wiederhole:
Was ist die Eingabe und gewünschte Ausgabe? (Datentypen und Funktionalität)
Nur int

Dein Post spricht übrigens von einer arithmetischen Reihe, deine for-Schleife durchläuft allerdings eine arithmetische Folge.
Du hast recht, es ist eine Folge ...

Dein Codebeispiel lässt vermuten, dass du einen Startwert, eine Schrittweite und eine Obergrenze vorgibst.
Ja, die Vermutung ist richtig


Was genau soll die Rückgabe sein?
Rechne es doch an einem einfachen Beispiel (Startwert 3, Schrittweite 4, Obergrenze 24 oder wie auch immer) von Hand vor!
Startwert 7, Grenze 107, Schrittweite 10
7 PZ 1. Glied 1. PZ Kette der Länge 2
17 PZ 2. Glied 1. PZ Kette der Länge 2
27 ZZ 1. Glied 1. ZZ Kette der Länge 1
37 PZ 1. Glied 1. PZ Kette der Länge 2
47 PZ 2. Glied 2. PZ Kette der Länge 2
57 ZZ 1. Glied 2. ZZ Kette der Länge 1
67 PZ 1. Glied 1. PZ Kette der Länge 1
77 ZZ 1. Glied 1. ZZ Kette der Länge 2
87 ZZ 2. Glied 1. ZZ Kette der Länge 2
97 PZ 1. Glied 3. PZ Kette der Länge 2
107 PZ 2. Glied 3. PZ Kette der Länge 2
so soll der auskommentierbare Listenprint sei.
Und dann soll noch die Zusammenfassung kommen. Sie sieht so aus:
Im Abschnitt 7 bis 107 gibt es insgesamt 7 Ketten, davon 4 PZ ketten und 3 ZZ-Ketten, genauer:

1 PZ Kette der Länge 1 (Startwerte)
3 PZ Ketten der Länge 2 (Startwerte)

2 ZZ Ketten der Länge 1 (Startwerte)
1 ZZ Kette der Länge 2 (Startwerte)

Mein Programm hat einen Fehler. Es kommt die ZZ Kettenlänge 15 vor 14 und 13 vor. Er registriert aber beim Zählen, weil ja 15 mehr als 13 sind, bei der 13. ZZ aus der 15-er Kette schon die Kettenlänge 13, obwohl es sie bis dahin gar nicht gibt. Mein Programm prüft also nicht den Abschluss. Das ist beim zusammenzählen dann eine Fehlerquelle....

Noch ein Wunsch: ich möchte den Code verstehen, wenn hier jemand Code hinstellt. Besonders das automatische Erstellen von Listen ... (Er bitte also Code mit Kommentar der schwierigen Stellen) Bloß nicht so schreiben, daß dann nur noch 3 Zeilen dastehen!
 


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, eingetragen 2020-11-24


Ich wiederhole:

Was ist die Eingabe und gewünschte Ausgabe? (Datentypen und Funktionalität)
Wie sieht ein einfaches Beispiel aus?

Was genau soll die Rückgabe sein?
Rechne es doch an einem einfachen Beispiel (Startwert 3, Schrittweite 4, Obergrenze 24 oder wie auch immer) von Hand vor!


Es nützt nichts, irgendeine obskure Ausgabe zu posten, wenn du nicht erklärst, wie diese zustandekommt.
Auch stellt sich die Frage, was du wissen willst, wenn dein Programm bereits exakt das ausgibt, was es ausgeben soll.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, vom Themenstarter, eingetragen 2020-11-24


Hallo Einfältiger,
2020-11-24 10:46 - DerEinfaeltige in Beitrag No. 7 schreibt:
Ich wiederhole:
-- zum wiederholten Male ...

Was ist die Eingabe und gewünschte Ausgabe? (Datentypen und Funktionalität)
Ich versteh nicht, Wass du meinst: Eingabe sind Startwert, Grenze und Schrittweite, vom Datentyp her alles Integer. Ausgaben sind vom Datentyp her auch alles Integer.
Was meinst Du noch?

Wie sieht ein einfaches Beispiel aus?
 Hatte ich in Post nr. 6 hingestellt ....

Was genau soll die Rückgabe sein?
Rechne es doch an einem einfachen Beispiel (Startwert 3, Schrittweite 4, Obergrenze 24 oder wie auch immer) von Hand vor!
Hab ich in Post Nr. 6 vorgerechnet per Hand


Auch stellt sich die Frage, was du wissen willst, wenn dein Programm bereits exakt das ausgibt, was es ausgeben soll.
tut es ja nicht. Was mein Programm leistet, steht in Post nr. 1, was es leisten soll, bzw. was ich mir wünsche in Post nr. 6.


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.9, eingetragen 2020-11-24


2020-11-24 10:59 - Bekell in Beitrag No. 8 schreibt:
Ich versteh nicht, Wass du meinst: Eingabe sind Startwert, Grenze und Schrittweite, vom Datentyp her alles Integer. Ausgaben sind vom Datentyp her auch alles Integer.
Was meinst Du noch?


Wie sieht ein einfaches Beispiel aus?
 Hatte ich in Post nr. 6 hingestellt ....
Dein Beispiel passt nicht zu der Aussage, dass die Rückgabe aus Ganzzahlwerten besteht.
Dein Beispiel hat keine Rückgabe und gibt als Seiteneffekt Text aus.


Den ersten Teil deines Beispiels könnte man vielleicht schreiben als

KettenAnalysator: (int,int,int) => [(int,int,int,str)]
Gibt eine Liste von 4-Tupeln der Form
(Glied_der_Kette,Gliednummer,Kettenlänge,Kettentyp) zurück
Beispiel:
KettenAnalysator(7,47,10) =>
[(7,1,2,"pz"),(17,2,2,"pz"),(27,1,1,"zz"),(37,1,2,"pz"),(47,2,2,"pz")]


Die Zusammenfassung wäre dann etwas wie:
KettenZusammenfassung: [(int,int,int,str)] => (int,int,int,int,int,[(int,[int])],[(int,[int])])
Nimmt die Ausgabe des Kettenanalysators und berechnet die Zusammenfassung
(Start, Ende, KettenzahlGesamt, KettenzahlPZ, KettenzahlZZ,
Liste PZketten der Form (Startwert,Länge),
Liste ZZketten der Form (Startwert,Länge))
Beispiel:
KettenZusammenfassung([(7,1,2,"pz"),(17,2,2,"pz"),(27,1,1,"zz"),(37,1,2,"pz"),(47,2,2,"pz")]) =>
(7,47,3,2,1,[(7,2),(37,2)],[(27,1)])




-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.10, vom Themenstarter, eingetragen 2020-11-24


Ja, jetzt hast Du verstanden, Einfältiger, was ich meinte.

Du denkst in Funktionen... das hatte ich mißverstanden, ich dachte bei Ein und Ausgabe an das Programm an sich.

Sag mir mal, wie das geht, eine automatisch erstellte Variable....


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.11, eingetragen 2020-11-24


2020-11-24 12:19 - Bekell in Beitrag No. 10 schreibt:
Sag mir mal, wie das geht, eine automatisch erstellte Variable....

Was soll das sein und was willst du damit erreichen?

Schlüssel-Wert Paare speichert man in Dictionaries.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.12, vom Themenstarter, eingetragen 2020-11-24


2020-11-24 13:23 - DerEinfaeltige in Beitrag No. 11 schreibt:
2020-11-24 12:19 - Bekell in Beitrag No. 10 schreibt:
Sag mir mal, wie das geht, eine automatisch erstellte Variable....




Schlüssel-Wert Paare speichert man in Dictionaries.
Okay Dictionaries ...


Was soll das sein und was willst du damit erreichen?

Also ich meine, daß nicht ich die anlegen muß, sondern das Programm...
Man hat jetzt einen Speicher, wo immer die beiden Werte drin sind (Kettenlänge, Anzahl) als Variablen per Hand anlegen, und das Programm erhöht bei jeder Findung mit +1.
Ketten_länge1=0
Ketten_länge2=0
Ketten_länge3=0
u.s.w.  So würd ich das auch hinkriegen. Aber das ist doof, weil ich nicht weiß, welche Kettenlängen alles vorkommen.
Ich will, daß er die Speicherorte selber anlegt, automatisch, und nur bei Bedarf.
Wie würdest Du das machen, mit welchen Befehlen ...
?



-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.13, eingetragen 2020-11-24


Indem ich ein Dictionary mit Kettenlänge als Schlüssel und der Anzahl als Wert anlege.

Einfaches Beispiel:
Python
def count(S):
    D = {}
    for x in S:
        if x not in D:
            D[x] = 0
        D[x] += 1
    return D
 

Das zählt die Vorkommen jedes Objektes im Container S und gibt ein Dict (Objekt (hashable) -> Anzahl (int)) zurück.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.14, vom Themenstarter, eingetragen 2020-11-24


2020-11-24 13:50 - DerEinfaeltige in Beitrag No. 13 schreibt:
Indem ich ein Dictionary mit Kettenlänge als Schlüssel und der Anzahl als Wert anlege.

Einfaches Beispiel:
Python
def count(S):
    D = {}
    for x in S:
        if x not in D:
            D[x] = 0
        D[x] += 1
    return D
 

Das zählt die Vorkommen jedes Objektes im Container S und gibt ein Dict (Objekt (hashable) -> Anzahl (int)) zurück.

Danke Einfältiger, ich mach das mal, und melde mich zurück!


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.15, vom Themenstarter, eingetragen 2020-11-24

Python
  1. "
  2. from openpyxl import Workbook
  3. from sympy.ntheory import isprime
  4. from math import sqrt
  5.  
  6.  
  7.  
  8. Start=13
  9. Grenze=1000
  10. Abstand=30
  11. pz_count=[]
  12. zz_count=[]
  13.  
  14. def count(S):
  15. D = {}
  16. for x in S:
  17. if x not in D:
  18. D[x] = 0
  19. D[x] += 1
  20. return D
  21.  
  22. for i in range(Start,Grenze,Abstand):
  23. if isprime(i):
  24. pz_count.append(i)
  25. else:
  26. zz_count.append(i)
  27. print(count(pz_count),count(zz_count) )
  28.  
Einen Teil hab ich verstanden:

Er sagt mir, daß die zahlen alle nur 1 x vorkommen. 🤗




-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Scynja
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 23.02.2011
Mitteilungen: 364
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.16, eingetragen 2020-11-24


2020-11-24 10:35 - Bekell in Beitrag No. 6 schreibt:

Noch ein Wunsch: ich möchte den Code verstehen, wenn hier jemand Code hinstellt. Besonders das automatische Erstellen von Listen ... (Er bitte also Code mit Kommentar der schwierigen Stellen) Bloß nicht so schreiben, daß dann nur noch 3 Zeilen dastehen!
 

Der Code ist in JS. Du müsstest ihn auf Python adaptieren, wenn du ihn nutzen möchtest. Ich schreibe ihn dir noch einmal als Pseudocode:

Erstelle leere Liste.

In einer Schleife:
- gib mir die nächste Pimzahlkette
- suche, ob es bereits Primzahlketten mit der Länge gibt
- a) falls ja: füge diese konkrete Kette dem Listenobjekt hinzu
- b) falls nein: lege einen neuen Listeneintrag an. Er enthält die Länge der Primzahlketten und eine Liste von Primzahlketten (hier werden spätere eingefügt)

In Python gibt es auch Listen und Objekte. Also sollte es einfach adaptierbar sein. (Wenn es denn überhaupt das ist, was du suchst)

www.w3schools.com/python/python_lists.asp#:~:text=%20Python%20Lists%20%201%20List.%20Lists%20are,Duplicates.%20%205%20List%20Length.%20%20More%20

www.w3schools.com/python/python_classes.asp



Wahlurne Für Scynja bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.17, vom Themenstarter, eingetragen 2020-11-24


Viele Dank, Einfältiger und Scania. Es waren letztlich 15 Minuten Überlegen, nachdem ich die Funktion hatte ... bin allerdings erst jetzt dazu gekommen. Danke nochmals!

Das ist das Ergebnis für 13,10000,30
PZKetten {4: 3, 3: 11, 2: 22, 1: 48, 5: 2, 6: 1}
ZZKetten {1: 39, 2: 28, 4: 4, 3: 9, 6: 1, 5: 5, 10: 1}

Hab allerdings noch 2 Fragen:

1. Warum sieht die Abrechnung nicht geordnet aus...pr den PZ-Ketten-Längen. Erst 4,3,2,1 und dann 5,6 ??
2. Und warum zeigt er die nicht vorkommenden Längen zwischen der höchsten Kettenlänge und den anderen existenten nicht mit 0 an?



es geht:
Python
  1. from openpyxl import Workbook
  2. from sympy.ntheory import isprime
  3. from math import sqrt
  4.  
  5.  
  6. wb = Workbook()
  7. Start=13
  8. Grenze=10000
  9. Abstand=30
  10. geszz_zähler=0
  11. gespz_zähler=0
  12. pz_zähler=0
  13. zz_zähler=0
  14. zahl="pz"
  15. ketten_länge=0
  16. pz_kettenlänge=0
  17. zz_kettenlänge=0
  18. pz_kettennrzähler=0
  19. zz_kettennrzähler=0
  20. pz_kettenlängenzähler=[]
  21. zz_kettenlängenzähler=[]
  22. vor_zahl="pz"
  23. größte_kettenlänge=0
  24. größte_pzkettenlänge=0
  25. größte_zzkettenlänge=0
  26. nr=0
  27. def ermittel_primteiler(x):
  28. primteiler_liste=[]
  29. y=int(sqrt(x))
  30. #for i in range(3,x//2,2):
  31. for i in range(3,y,2):
  32. if x%i==0 and isprime(i):
  33. primteiler_liste.append(i)
  34. return(primteiler_liste)
  35.  
  36. def count(S):
  37. D = {}
  38. for x in S:
  39. if x not in D:
  40. D[x] = 0
  41. D[x] += 1
  42. return D
  43.  
  44. #ws=wb.active
  45. #ws.append(["Nr","Zahl","PT Zahl","Anzahl PT","Zahl a","PT a","Anzahl PTa","PZ b","PZ a",])
  46. for n in range(Start,Grenze,Abstand):
  47. nr=nr+1
  48. if isprime(n) and vor_zahl=="pz":
  49. gespz_zähler=gespz_zähler+1
  50. ketten_länge=ketten_länge+1
  51. pz_kettenlänge=pz_kettenlänge+1
  52. zahl="pz"
  53. if isprime(n) and vor_zahl=="zz":
  54. gespz_zähler=gespz_zähler+1
  55. zz_kettenlängenzähler.append(ketten_länge)
  56. ketten_länge=1
  57. pz_kettenlänge=1
  58. pz_kettennrzähler=pz_kettennrzähler+1
  59. zahl="pz"
  60.  
  61. if not isprime(n) and vor_zahl=="pz":
  62. geszz_zähler=geszz_zähler+1
  63. pz_kettenlängenzähler.append(ketten_länge)
  64. ketten_länge=1
  65. zz_kettenlänge=1
  66. zz_kettennrzähler=zz_kettennrzähler+1
  67. zahl="zz"
  68. if not isprime(n) and vor_zahl=="zz":
  69. ketten_länge=ketten_länge+1
  70. zz_kettenlänge=zz_kettenlänge+1
  71. zahl="zz"
  72. if ketten_länge>größte_kettenlänge:
  73. größte_kettenlänge=größte_kettenlänge+1
  74. if pz_kettenlänge>größte_pzkettenlänge:
  75. größte_pzkettenlänge=größte_pzkettenlänge+1
  76. if zz_kettenlänge>größte_zzkettenlänge:
  77. größte_zzkettenlänge=größte_zzkettenlänge+1
  78.  
  79.  
  80. print("Nr:",nr,n,ermittel_primteiler(n),"kl",ketten_länge,"gpzkl",größte_pzkettenlänge,"gzzkl",größte_zzkettenlänge, größte_kettenlänge)
  81. vor_zahl=zahl
  82. print("PZKetten",count(pz_kettenlängenzähler))
  83. print("ZZKetten",count(zz_kettenlängenzähler))





-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.18, eingetragen 2020-11-25


1. Weil Mengen im Allgemeinen ungeordnet sind.
2. Weil du nur vorhandene Ketten zählst/speicherst.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.19, vom Themenstarter, eingetragen 2020-11-25


Danke Einfältiger, ich hab das Dictionary mal versucht zu sortieren hiermit:
Python
  1. liste = [(val,key) for key,val in pz_kettenlängenzähler.items()]
  2. liste.sort()
  3. #liste.reverse()
  4. print (liste)

aber er sagt: AttributeError: 'list' object has no attribute 'items'

Was ist zu tun?




-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.20, eingetragen 2020-11-25


Ich verstehe nicht, was du da tust.

Da ich deinen Code nicht verstehe, hier ein etwas strukturierterer Ansatz:
Python
from sympy.ntheory import isprime
 
def chain(start, end, step):
    chain_type = isprime(start)
    length = 1
    while start + length * step <= end and \
          isprime(start + length * step) == chain_type:
        length += 1
    return (start, length, chain_type)
 
def chain_finder(start, end, step):
    loc = []
    s = start
    while s <= end:
        s,l,t = chain(s, end, step)
        loc.append((s,l,t))
        s += l * step
    return loc
 
def chain_analyzer(start, end, step):
    loc = chain_finder(start, end, step)
    PrimeChains = {}
    CompositeChains = {}
    for (s,l,t) in loc:
        if t:
            if l not in PrimeChains:
                PrimeChains[l] = []
            PrimeChains[l].append(s)
        else:
            if l not in CompositeChains:
                CompositeChains[l] = []
            CompositeChains[l].append(s)
    return (PrimeChains, CompositeChains)
 
 
def print_chains(ChainDict):
    keys = sorted(ChainDict.keys())
    for k in keys:
        line = "%4d  |  %3d   |  " % (k,len(ChainDict[k]))
        line += str(ChainDict[k])
        print(line)
 
 
def print_analysis(start, end, step):
    PrimeChains, CompositeChains = chain_analyzer(start, end, step)
    print("-" * 50)
    print("Startwert = %d; Endwert = %d; Schrittweite = %d" % (start, end, step))
    print()
    print("Primzahlketten:")
    print()
    print("Länge | Anzahl | Startwerte")
    print_chains(PrimeChains)
    print()
    print("Zusammengesetzte Ketten:")
    print()
    print("Länge | Anzahl | Startwerte")
    print_chains(CompositeChains)
    print("-" * 50)
    print()
 
 
print_analysis(3,103,10)     
print_analysis(13,10000,30)    
 
--------------------------------------------------
Startwert = 3; Endwert = 103; Schrittweite = 10
 
Primzahlketten:
 
Länge | Anzahl | Startwerte
   1  |    1   |  [103]
   2  |    2   |  [43, 73]
   3  |    1   |  [3]
 
Zusammengesetzte Ketten:
 
Länge | Anzahl | Startwerte
   1  |    3   |  [33, 63, 93]
--------------------------------------------------
 
--------------------------------------------------
Startwert = 13; Endwert = 10000; Schrittweite = 30
 
Primzahlketten:
 
Länge | Anzahl | Startwerte
   1  |   49   |  [373, 523, 733, 1213, 1303, 1543, 1873, 1933, 1993, 2203, 2293, 2383, 2593, 2953, 3163, 3253, 3733, 3943, 4003, 4093, 4153, 4363, 4423, 4603, 4663, 4723, 5113, 5233, 5323, 5503, 5563, 5743, 6553, 6883, 7333, 7393, 7873, 8053, 8353, 8443, 8563, 8623, 8713, 8803, 9283, 9343, 9733, 9883, 9973]
   2  |   22   |  [283, 433, 2473, 2683, 2803, 3433, 4243, 4483, 4783, 4903, 4993, 5413, 5923, 6043, 6133, 6343, 7213, 7573, 7723, 9013, 9103, 9613]
   3  |   11   |  [163, 613, 823, 1423, 3313, 3793, 5623, 7933, 8233, 8863, 9403]
   4  |    3   |  [13, 2053, 3583]
   5  |    2   |  [1033, 1663]
   6  |    1   |  [6673]
 
Zusammengesetzte Ketten:
 
Länge | Anzahl | Startwerte
   1  |   39   |  [133, 253, 343, 403, 493, 703, 1183, 1513, 1903, 1963, 2023, 2173, 3283, 3403, 3703, 3763, 3973, 4123, 4393, 4453, 4633, 4693, 4753, 4963, 5473, 5533, 5593, 5713, 6103, 6853, 7363, 7903, 8023, 8323, 8593, 8833, 9073, 9313, 9373]
   2  |   28   |  [553, 763, 1243, 1813, 2233, 2323, 2413, 2533, 2623, 2743, 3193, 3883, 4033, 4183, 4303, 4543, 4843, 5053, 5263, 5353, 5983, 7273, 8383, 8653, 8743, 8953, 9673, 9913]
   3  |    9   |  [1333, 1573, 2863, 3493, 5143, 6583, 7633, 7783, 8473]
   4  |    4   |  [913, 9163, 9493, 9763]
   5  |    5   |  [5773, 6193, 6403, 7423, 8083]
   6  |    1   |  [2983]
  10  |    1   |  [6913]
--------------------------------------------------
 





-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2152
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.21, vom Themenstarter, eingetragen 2020-11-25


Hallo Einfältiger,

ich hab Deine Funktion Print_chain übernommen, und er sagt zu der Zeile:
38: keys = sorted(ChainDict.keys())

Quote: 'list' object has no attribute 'keys'

Was meint er damit? Wieso macht er es nicht mit meinem Diktionary "pz_kettenlängenzähler"?

Antwort, weil "pz_kettenlängenzähler" kein Dictionary, sondern eine Liste!

Wie bekomme ich also die Ausgabe von: "count(pz_kettenlängenzähler)" in ein Dictionary verwandelt?


-----------------
Das Schwierige ist nicht die Mathematik. Schwierig ist es zu formulieren, daß man selber versteht, was man sieht und die anderen auch!



Wahlurne Für Bekell bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2604
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.22, eingetragen 2020-11-25


2020-11-25 12:25 - Bekell in Beitrag No. 21 schreibt:

Wie bekomme ich also die Ausgabe von: "count(pz_kettenlängenzähler)" in ein Dictionary verwandelt?

Die Frage ist unsinnig.
"count" gibt ein Dictionary zurück.

Versuche dein eigenes Problem zu verstehen und strukturiere den Code vernünftig.
Viel mehr kann man dazu nicht sagen.


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



Wahlurne Für DerEinfaeltige bei den Matheplanet-Awards stimmen
Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]