20. oktober 2003 - 12:47Der er
39 kommentarer og 1 løsning
Hvor lang tid tager det at multiplicere 2262 store tal sammen?
Jeg benytter dynamiske tabeller og pointere til at multiplicere store tal. Er der nogen der kan fortælle mig hvor lang tid det ca. bør tage at multiplicere alle primtal mellem 2 og 20000(der er 2262 primtal)? Min Cpu er en 900 Mhz.
var C: Cardinal; begin C := GetTickCount; //GetTickCount returnerer antallet af milisekunder siden Windows blev startet. LavEnMasseBeregninger(12343245); C := GetTickCount - C; ShowMessage('Beregningerne tog ' + IntToStr(C) + ' milisekunder.'); end;
Problemet er at jeg jo gerne vil vide om det kan passe, at det tager så lang tid at beregne. Tiden har jeg holdt for mig selv, fordi jeg gerne vil vide hvor lang tid nogle af jer mener det bør tage? Bør det tage under 5 min, under en halv time, en time eller ?????
Når jeg har ganget tallene, til og med Primtallet 37, så har jeg et resultat der ser sådanne ud. 7420738134810...og hvis resultatet skal være en integer?? Du må få en fejl undervejs?
Hvis jeg ganger alle primtal mellem 2 og 20000, får jeg et resultat der er på mere end 8000 cifre....det er derfor jeg benytter tabeller og pointere??!
stoney: Tror penta har ret. Prøv og skriv de fundne primtal og melleregningerne ud. resultatet går jo i minus flere gange hvilke det jo ikke burde, men kun gør fordi en Int64 åbenbart ikke er stor nok (hvad er større !?)
C := GetTickCount; resultat := 1; Memo1.Clear; for i := 2 to 20000 do begin if isprime(i) then Begin Memo1.Lines.Add('Primtal fundet: ' + IntToStr(i)); Memo1.Lines.Add('Temp. resultat: ' + IntToStr(resultat)); resultat := resultat * i; end; end; C := GetTickCount - C;
Nej tak. Jeg har en liste over samtlige primtal mellem 2 og 20000. Hvis jeg tager en almindelig lommeregner får jeg: (2*3*5*7*9*11*13*17*19*23*29*31*37*41*43*47)= 5534008043296422690 Dvs. jeg har ganget 16 af de 4203 primtal der findes mellem 2 og 20000. Dette giver et resultat på 19 cifre. Så mangler jeg kun at gange resultatet med de resterende 4184 primtal...og det siger I alt i alt skal give et resultat på 19 cifre...det kan jeg ikke få til at passe.
Hvis du skal lave kryptering, så start på et niveau hvor du kan være med ....
Tilbage til dit SPM. Jeg har lige lavet en test.
På "min" computer en p4 1620 Mhz skal jeg bruge 343 ms på at generer de 2262 primtal, og ydligere 1 ms på at gange dem sammen.
Det tager "ingen" tid at gange dem sammen, assembler instruktionen imul bruger kun en enkelt instruktion på at gange to heltal sammen. det har den gjort siden P2. Derfor giver det ikke meningen at tage tid på så lille et regne stykke, 2262 er ikke ret meget !
Hvis dit regne stykke tager langtid, er det fordi du bruger langtid på dine primtal.
Ok jeg er stået af, men siger tak for hjælpen alle sammen. Jens B kunne du ikke give et "svar", så du kan få dine berettigede point. Jeg opretter et nyt spørgsmål...for dette bliver vist ikke til mere. Jeg må jo finde ud af hvad jeg gør forkert. Men Jens B jeg vil meget gerne høre fra dig i mit næste indlæg, for jeg synes du har fat i noget interessant og tager mit spørgsmål seriøst, dejligt:) Jeg har meget at lære endnu :=)
Jamen der er jo en grund til at at du har alle de point. Du har vel fortjent dem...og hvad du så herefter vil gøre med dine point, det blander jeg mig ikke i.
Det var min multiplikation der var problemet. Jens B>> Grunden til I ikke har hørt mere om generering af primtallene er: Jeg genererer primtallene, gemmer dem og ved et klik på en knap - begynder multiplikationen og det er så dennes tid jeg har været interesseret i.
Jeg har nu fået optimeret min kode, og det går en del stærkere. Jeg har som sagt meget at lære endnu :) Endnu en gang mange tak for hjælpen-
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.