mmmja laat ik even opsommen wat we al hebben...
ten eerste hebben we hier 2 groepen mensen, de ene (wat kleinere) groep wil het uitzoeken met complexe wiskundige methoden die we zelf niet eens begrijpen. Natuurlijk zijn er snelle methoden bedacht door knappe mensen, maar ik denk niet dat dat voor ons haalbaar is.
Ikzelf zit dan ook in de 2e groep mensen, die gewoon liever willen brute forcen met z'n alle. Voor mij begon dit als een geintje, en ik zie het nog steeds als een geintje

. Ik heb al eerder gepost dat als we echt vette research gaan doen naar complexe zooi dat de lol er al voor vele (waaronder ik) snel af is, omdat sommige onder ons het niet begrijpen en omdat we er gewoon TE serieus mee aan het werken zijn. Het gaat mij totaal niet om het kraken van die code, hoewel dat wel het doel is, maar ik zie liever gewoon dat een zootje tweakers, het liefst meer dan 100 man, lekker bezig zijn met rekenen en grazen, opscheppen over de keyrate omdat je weer een nieuwe processor hebt, en al die taferelen die je nu voor RC5 en OGR25 ziet. En dat je dan ook nog kunt zeggen van: kijk, dat hebben wij opgezet. En dan zou het natuurlijk ook nog helemaal fantastisch zijn als we ook nog eens een keer die code kraken, ook al is het 10 jaar na datum en is de geldprijs allang aan iemand anders gegeven
Maar goed, even over het (inferieure

) algoritme...
Het is dus duidelijk dat we willen brute forcen, dus gewoon het grote getal proberen te delen door kleine getallen. Omdat die deling een relatief lang proces is, is het noodzaak om zoveel mogelijk getallen weg te strepen VOORDAT je gaat proberen te delen. En dan bedoel ik dus de getallen waarvan je makkelijk kan zien of het priem is of niet.
Dit betekent natuurlijk niet dat je persee ALLEEN priemgetallen hoeft te controleren, dus het is niet noodzakelijk om echt van te voren te kijken of een getal priem is. Wel is het handig om de marge samengestelde getallen zo klein mogelijk te houden, zodat we sneller door de keyspace heen gaan.
Okee, we moeten dus makkelijk kunnen zien wat mogelijk priem is en wat absoluut niet. Elke simpele ziel kan bedenken dat we dan natuurlijk niet getallen moeten proberen die deelbaar zijn door 2, oftewel je houdt alle oneven getallen over. Op diezelfde manier zou je natuurlijk getallen deelbaar door 3 kunnen overslaan, door steeds 2 opeenvolgende getallen te controleren, dan weer niet, dan weer 2 wel, dan weer niet, enz.
Als je dat combineert (dus niet deelbaar door 2 en 3), en je begint bij 1, dan doe je dus eerst volgende 3 niet (2, 3 en 4), dan 1 wel (5), dan 1 niet (6), dan 1 wel (7) en vervolgens weer 3 niet (8, 9 en 10). Je krijgt een herhalende reeks, namelijk "3 niet, 1 wel, 1 niet, 1 wel"
Ik stel voor om dit in een array te zetten, elk element in die array is het aantal dat je moet optellen bij het huidige getal om de volgende mogelijke priem te krijgen. Bij de vorige reeks wordt dat dus { 4, 2 }
Deze array wordt steeds herhaalt. Als je bij 1 begint krijg je dus 1, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, enz.
Het was je misschien al opgevallen dat de meeste van deze getallen ook daadwerkelijk priem zijn, behalve 25 en 35. In het begin krijg je ook erg veel priemgetallen, maar zodra je wat hoger komt zitten er echt ongelooflijk veel samengestelde getallen tussen.
Het is dus handig om die reeks uit te breiden zodat er meer samengestelde getallen worden overgeslagen. En dan heb ik het niet over een reeks opgebouwd uit de eerste 20 priemen ofzo, maar eerder de eerste 1.000.000 of zelfs meer
Het bepalen van de reeks is een eenmalig proces, en in principe ook in een mum van tijd berekend.
client / server model
Omdat dit allemaal gedistributeerd moet werken, lijkt me het meest voordehandliggend dat er ergens een keyserver draait die gewoon tegen clients zegt vanaf welke getallen ze moeten proberen. En dan bedoel ik natuurlijk niet letterlijk welke getallen, maar meer 1.000.000 getallen, beginnend vanaf x. De keyserver moet de uitgegeven keys natuurlijk ook administreren... Dit is een enorm probleem, aangezien er gigantisch veel keys zullen zijn (een getal van 700 cijfers gedeeld door 1.000.000 is nog altijd 694 cijfers, oftewel onmogelijk op te slaan). Dit is dus nog een punt waar we heel hard over na moeten denken.
De client vraagt dus simpelweg keys op van de server, gaat ze berekenen, en op een gegeven moment stuurt hij de resultaten terug (in dit geval dus simpelweg "niet gevonden", of "hoeraa!!! dit getal was het: 24872348723" ofzoiets
Na ja, het was een lang verhaal, en uiteraard sta ik open voor suggesties!