Hurley Skrevet 11. mai 2003 Del Skrevet 11. mai 2003 Dette er vel kanskje et matematisk spørsmål. 'Finner alle primtall opp til og med n. Dim n As Double Dim tall As Double Dim primtall As String n = CDbl(txtHeltall.Text) tall = 2 primtall = "Primtall: " Do While n > tall Do While ??? primtall = primtall & tall & ", " tall += 1 Loop Loop MessageBox.Show(primtall) Hva skal jeg ha der det står ??? for å finne ut om et tall er primtall? Kan jeg bruke Mod? Et primtall er et tall som er bare delelig med seg selv sant? Lenke til kommentar
alftore Skrevet 12. mai 2003 Del Skrevet 12. mai 2003 Først og fremst hvorfor bruker du Double? Primtall kan jo kun bestå av heltall så da burde du bruke Int eller Long. 'Finner alle primtall opp til og med n. Dim n As Int Dim tall As Int Dim divisor As Int Dim primtall As String n = CInt(txtHeltall.Text) tall = 3 primtall = "Primtall: " If (n > 2) primtall = primtall & "2, " EndIf Do While n > tall divisor = 2 Do While (2*divisor) < tall If (tall Mod divisor == 0) primtall = primtall & tall & ", " EndIf divisor += 1 Loop tall += 2 Loop MessageBox.Show(primtall) Nå har jeg ikke sjekka koden, men tror :-? den er riktig. De første 500 primtallene 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499 [/code] Lenke til kommentar
Legion Skrevet 12. mai 2003 Del Skrevet 12. mai 2003 Nå har jeg ikke sjekka koden, men tror :-? den er riktig. fikk ikke den der til å fungere, mulig jeg porta feil*kremt* følgende fungerer iallefall, skrevet i pascal, men det skal vel ikke by på store problem... procedure TForm1.StartClick(Sender: TObject); function isPrime(n : integer): boolean; var i : integer; smldiv : integer; procedure findivisor(n : integer; testdiv : integer; var res : integer); function square(n : integer): integer; begin square := n*n; end;//square begin if (square(testdiv) > n) then begin res := n; end else begin if ((n mod testdiv) = 0) then begin res := testdiv; end else begin findivisor(n,(testdiv+1),res); end end; end;//findivisor begin findivisor(n,2,smldiv); isPrime := FALSE; if n = smldiv then isPrime := TRUE; end;//isPrime var max : integer; i : integer; begin max := StrToInt(Edit1.Text); for i := 2 to max do begin if isPrime(i) then ListBox1.Items.Add(IntToStr(i)); end; end; Lenke til kommentar
Hurley Skrevet 13. mai 2003 Forfatter Del Skrevet 13. mai 2003 Først og fremst hvorfor bruker du Double?Primtall kan jo kun bestå av heltall så da burde du bruke Int eller Long. Jeg er newbie, og vant med at nummer skal behandles som double. Men tilbake til koden, den funker ikke helt nei. Den kommer ikke fram til noen primtall over 2 på denne måten: Do While n > tall divisor = 2 Do While (2 * divisor) < tall If (tall Mod divisor) = 0 primtall = primtall & tall & ", " EndIf divisor += 1 Loop tall += 2 Loop Lenke til kommentar
alftore Skrevet 14. mai 2003 Del Skrevet 14. mai 2003 Ok.. fant et par feil ja.. men dette skal ihvertfall funke 'Finner alle primtall opp til og med n. Dim n As Integer Dim tall As Integer Dim divisor As Integer Dim primtall As String Dim erprimtall As Boolean Try n = CInt(txtPrimtall.Text) Catch ex As Exception MessageBox.Show(ex.Message, ex.Source) End Try tall = 3 primtall = "Primtall: " If (n > 2) Then primtall = primtall & "2, " End If Do While n > tall 'Sjekker heretter kun oddetall siden det er kun de som kan være primtall divisor = 3 erprimtall = True 'Antar at tallet er primtall Do While (2 * divisor) < tall And erprimtall 'Tester om tallet gir null i rest når vi deler på divisor, 'i så tilfelle er ikke tallet et primtall. If (tall Mod divisor = 0) Then erprimtall = False End If divisor += 2 Loop If erprimtall Then primtall = primtall & tall & ", " End If tall += 2 Loop MessageBox.Show(primtall) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå