08. december 2003 - 12:49Der er
15 kommentarer og 3 løsninger
Afgøre om et tal er et primtal.
Findes der ikke en funktion i Excel til at afgøre om et tal er et primtal? Jeg skal ikke bruge den på specielt store tal, så selvfølgelig kunne man bare skrue en standard-makro sammen der forsøger division med alle ulige tal fra 3 til kvadratroden af tallet, men jeg ville gerne slippe for at bruge makroer.
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
>Jkrons Tja, det lader til du har ret. Det er bare underligt at Derive (det program der ligger på min TI-89'er) både kan afgøre om et tal er primtal, samt opløse pænt store tal i alle dets primfaktorer på et par sekunder, og så kan Excel ingen af delene???
>Flemmingdahl Din løsning er selvfølgelig kun brugbar på rimelig små tal, men det er dog en Excel-løsning uden makroer, og udvider jeg den med de følgende primtal op til 31 er det faktisk nok til at løse det konkrete problem jeg arbejder med.
>Blackadder I det konkrete tilfælde er det kun tal <= 1000.
>Kabbak Tak for funktionen, men det er ikke lige det jeg står og mangler.
>Kabbak Desuden er funktionen ikke så effektiv. Den tester alle tal fra 2 til X/2. Faktisk er det rigeligt at teste op til kvadratroden af X. Desuden ville det være smart kun at teste de ulige tal da der jo ikke findes lige primtal > 2.
>Janvogt Spændende - men jeg vil gerne have den oversat til DK. OR, TRUE og ROW giver sig selv INT = HELTAL SQRT = KVROD MATCH = SAMMENLIGN ??? INDIRECT = INDIREKTE ???
Men ISNA har jeg ikke noget bud på.
I øvrigt skal jeg da vist læse lidt på Array-formler - har jeg aldrig arbejdet med i Excel før! Når jeg har skrevet formlen skal jeg altså trykke CTRL+SHFT+ENTER i stedet for ENTER som jeg plejer?!?
Formlen fungerer ved, at alle potentielle prim-faktorer divideres op i tallet, og array-resultatet testes for at se, om det er et helt tal. Er det IKKE et helt tal, er tallet et primtal.
Det eneste der mangler er min forståelse. Det må være i argumentet til INDIREKTE at array-delen kommer ind - eftersom ethvert ikke-primtal har mindst en primfaktor mellem 2 og kvadratroden af tallet selv. Men syntax'en i argumentet til INDIREKTE fatter jeg ikke!
2^20996011-1 er det størst kendte Mersenneprimtal, altså et primtal udregnet efter formlen 2^P-1.
Tallet har mere en 6,3 millioner cifre og ville fylde mere end 1.500 A4 sider udskrevet :-) Bare til almindelig info.
Synes godt om
Slettet bruger
09. december 2003 - 15:51#18
Den "klassiske" måde at gøre det på er ved hjælp af en algoritme der hedder "Sieve of Eratosthenes". Her implementeret som en VBA funktion.
---------------------- Option Base 1
Function isPrime(n As Integer) As Boolean
Dim primeArray() As Boolean ReDim primeArray(n) Dim i As Integer Dim j As Integer
For i = 1 To n primeArray(i) = True Next i primeArray(1) = False
For i = 2 To Sqr(n) For j = i + 1 To n If j Mod i = 0 And primeArray(j) <> False Then primeArray(j) = False End If Next j Next i
isPrime = primeArray(n)
End Function -----------------
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.