Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...