Posts mit dem Label Zahlentheorie werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Zahlentheorie werden angezeigt. Alle Posts anzeigen

29. November 2008

Wolfspelz's Primzahl-k-linge Vermutung

Habe gerade gelesen, dass die Zahl der Primzahlen unter einer Zahl n etwa gleich n/log n ist. Das "etwa" heisst: der Grenzwert für n gegen unendlich der wirklichen Zahl der Primzahlen geteilt durch den Schätzwert "n/log n" ist gleich 1. Mit anderen Worten: für große n ist der Unterschied vernachlässigbar und die Schätzung ziemlich genau.

Es gibt außerdem noch Primzahlzwillinge, das sind aufeinanderfolgende Zahlen, die beide Primzahlen sind. Natürlich nicht direkt aufeinanderfolgend, weil dann immer eine gerade Zahl dabei wäre, die durch 2 teilbar und deshalb keine Primzahl ist. Aber wenn n und n+2 beide Primzahlen sind, dann sind sie Primzahlzwillinge. Die Zahl der Primzahlzwillinge unter einer Zahl n ist etwa n/(log n)^2. Das sieht mir ziemlich ähnlich zur Zahl der Primzahlen unterhalb von n aus.

Jetzt kommts: ich stelle mal die Vermutung auf, dass die Zahl der Primzahldrillinge unterhalb von n etwa gleich n/(log n)^3 ist. Verallgemeinerung: die Zahl der Primzahl-k-linge unter n ist etwa n/(log n)^k.

Warum ist das eine "Vermutung"? Weil jeder große Mathematiker eine Vermutung aufstellt an deren Beweis sich Generationen die Zähne ausbeissen (Fermat, Poincaré, Riemann, Goldbach, Legendre, Hodge). Ergo: die Vermutung reicht für den Ruhm. Vielleicht ist es auch so, dass nur die Vermutungen von großen Mathematikern überhaupt bekannt sind, weil von den anderen keiner Notiz nimmt. Also: ich hab meinen Teil getan, die Vermutung aufgestellt. Jetzt ist es an Euch, Notiz zu nehmen und die Zähne daran auszubeissen, damit es noch für den Titel "großer Mathematiker" langt.

_happy_proving()

18. August 2006

Eins ist Null

Ein neuer Beitrag zum Thema die schönsten Fehlermeldungen:



1 ist NULL, also 1 = 0, aha.
naja, er rettet sich noch mit der Aussage: "oder kein Objekt", die aber auch gefährlich ist, weil mache ja behaupten "alles ist ein Objekt". Wenn alles ein Objekt ist, ist 1 auch ein Objekt, also doch 1 = 0?

Aha:
1= 1+0+0+0+...
= 1+(1-1)+(1-1)+(1-1)+...
= (1+1)-(1+1)-(1+1)-(1+...
= 2-2-2-2...
= (2-2)-(2-2...
= 0-0...
= 0

21. Mai 2005

Die perfekt symmerische Zeit

Gestern abend war die Uhrzeit absolut symmetrisch mit mehreren Symmetrieachsen: 20.05.2005 20:05. Achsensymmetrisch und rotationssymmetrisch mit einer dreizählichen Achse. Ein denkwürdiges Datum und fast niemand hat es gemerkt (danke DF).



Die Zeit war so symmetrisch, dass der Verdacht naheliegt, dass dieser eine Moment vielleicht sogar der Mittelpunkt der Zeit war. Das würde bedeuten, dass Halbzeit ist und sich das Universum jetzt wieder zusammenzieht. Zum Glück sind es noch ein paar Milliarden Jahre.

_happy_coding_

8. Februar 2005

Ich will User

Ich habe ein tolles Stueck Software programmiert. Und praktisch it es auch noch. Das finde nicht nur ich sondern hunderte von Testern. Wenn 80% aller zufaelligen Testuser die Software toll finden, kann das nicht so falsch sein. Komischerweise gibt es aber nur wenige richtige User. Sogar die begeisterten Testuser wundern sich, dass es nur wenige User gibt. Eigentlich sollte man meinen, dass es sich per Mund-zu-Mund Propaganda rumspricht und schnell viele User bekommt. So ist es aber nicht. Nur ab und zu kommt jemand zufaellig auf der Homepage vorbei, macht den Download, installiert, probiert und findet es gut. Und dann ... nichts weiter. Keine Mund-zu-Mund Propaganda, keine Massen von Usern. Es geht natuerlich um LLuna. Was ist falsch?

Ideen bitte an wolf@bluehands.de.

Trotzdem: ich gebe nicht auf. Moralische Unterstuetzung bitte an wolf@bluehands.de.

_happy_coding_

4. Februar 2005

1 Mio mal fast nichts

Moderne Prozessoren sind rasend schnell. Sie machen eine Milliarde Operationen pro Sekunde. Manche auch 2, 4 oder 10, aber das ist so die Groessenordnung. Deshalb meinen manche Leute sie koennen dem Prozessor auch viel zumuten. Falsch! Prozessorzeit ist ein kostbares Gut. Sie muss gehegt und gepflegt werden weil sie sonst viel zu schnell aus ist. Jede Instruktion will bedacht sein. Nicht jede Prozessorinstruktion, aber jede Codezeile. Natuerlich nicht immer, aber immer in Schleifen, die 1 Mio mal durchlaufen werden. Und das ist das Thema hier: Wenn du etwas 1 Mio mal tust, dann tue FAST nichts.

Obwohl Prozessoren rasend schnell sind, ist einfach nicht mehr drin. 1 Mio mal in Speicher schreiben, um ein Array zu initialisieren ist OK. 1 Mio mal addieren ist auch OK, wenn man nicht erwartet, dass es nur eine Mikrosekunde dauert, aber lege NIE 1 Mio Objekte an. Das bedeutet 1 Mio mal Memory Management. Als Faustregel gilt, Memory Management ist 1000 mal so teuer, wie Memory schreiben. Also kosten 100 malloc oder new dann 1e9 Zyklen. Das dauert eine ganze Sekunde. Das ist nicht schnell. Und wenn die Applikation fertig ist, dann wird es noch schlimmer. Dann kommt jemand auf die Idee das ganze als Serveranwendung mit 100 Usern zu betreiben. Wenn das alle User machen, dauert es 100 Sekunden.

Deshalb: Wenn man etwas sehr oft tut, dann besser fast nichts. Auch im Zeitalter der Gigaherzen.

_happy_coding_

20. Dezember 2004

Applikationen sind auf Windows instabiler, als auf Linux

Warum? Weil Windows besser ist. Nochmal: Windows ist besser, deshalb sind Applikationen in der Praxis instabiler.

Windows bietet unendlich viele Systemkomponenten. Viele Dienste, die man im taeglichen Programmierleben braucht, bietet Windows als API. Das faengt an beim XML Parser, ueber HTTP mit Caching, URL-Behandlung, Embedded Browser, Verschluesselung, bis zu Sicherheitsdiensten und vielen anderen mehr. Als Programmierer bin ich froh, das alles nutzen zu koennen. Warum selbst implementieren, wenn das Betriebssystem das alles bietet? Auf Linux gibt es das alles nicht. Zumindest nicht als System-APIs. Natuerlich gibt es XML-Parser, Verschluesselung, HTTP-Libraries und Browser zum Einbetten. Aber man muss sie sich meistens im Netz beschaffen, selbst nochmals wrappen, moeglicherweise selbst kompilieren und dann dazulinken. Sehr muehsam, wenn man viel braucht, weil diese Komponenten auf Linux (oder Open Source) im allgemeinen eben aus verschiedenen Haenden kommen. Alle mit eigenen Coding Conventions und Interface Conventions.

Bei meinen Windows Anwendungen linke ich gegen LIBs, und benutzt werden dann vom Betriebssystem bereitgestellte DLLs. Bei Linux linke ich die libXX.a oder lege die Shared Libraries dazu. Meine-Windows Anwendungen haben damit Laufzeitabhaengigkeiten vom System. Meine Linux-Anwendungen sind selbst-konsistent. Jetzt kommt eine neue Betriebssystem Version oder (schlimmer) eine Bugfix Release (auch Service Pack genannt). Dann fliegen mir die Installationen der Kunden um die Ohren, und zwar fast nur die Windows Installationen.

Das kommt so: angenommen es gibt bei jedem Systemdienst, den ich verwende eine 0,1 % Wahrscheinlichkeit, dass sich die Semantik einer Schnittstelle, oder das Verhalten oder Abhaengigkeiten geaendert haben. Ich verwende 20 solcher Systemdienste. Ich habe 20 Kunden. Das ganze ueber 5 Jahre bei 8 Systemupdates pro Jahr plus 8 "signifikanten" Konfigurationsaenderungen des Kunden intern. Macht zusammen 30 Notsituationen in denen betriebskritische Dienste beim Kunden nicht laufen. Diese addieren sich zu den ueblichen Bugs, die es eh schon gibt und die erst bei "ungewoehnlicher" Bedienung auftreten. Bei jedem Kunden also zusaetzlich 1-2 mal. Fuer mich bedeutet das alle 2 Monate Emergency-Debugging am Livesystem waehrend der Betrieb eines Kunden steht.

Manchmal wuensche ich mir, Windows waere nicht so gut und ich wuerde alle Dienste wie auf Linux selbst einbinden muessen. Auf jeden Fall sollte man auch bei Windows statisch binden.

_happy_coding_