Kezdőoldal » Számítástechnika » Programozás » Visual Basic-ben írtam egy...

Visual Basic-ben írtam egy prímszámoló programot, de rosszul számol, mi lehet a baja?

Figyelt kérdés

Imports System.Console

Imports System.IO

Module Module1


Sub Main()

Dim ki As New StreamWriter("primszam.txt")

Dim n As Integer = 10000

Dim e As Integer

Dim d As Integer

Dim b As Integer


b = Val(n ^ 0.5)


For i As Integer = 1 To n


e = 0

For d = 1 To b


If (i Mod d) = 0 Then

e = e + 1


End If

Next

If e = 2 Then

ki.WriteLine(i)

'Write(i & " ")

End If


Next


ki.Close()


End Sub


End Module


ezt csináltam és nem ad jó számokat kb 150-ig jó, de utána nem. legelőször nem val()függvénnyel csináltam hanem az "n" változóig futtattam a 2. for ciklust is. és ugye úgy a gyorsabb ha csak a szám gyökéig csináljuk és azért írtam bele a "b = Val(n ^ 0.5)" ami elvileg veszi a szám gyökét majd veszi az egész részét. de valamiért nem jó ! tesz bele páros számokat is :D. Egyáltalán a val() egészre kerekít? (neten kerestem rá). előre is köszönöm a segítségeket!


2011. máj. 4. 19:33
 1/6 anonim ***** válasza:

Előre leszögezem hogy nem értek a VisualBasichez, szóval lehet hogy hüleség.

Hogyha a gyökéig mész, akkor a "e" osztó csak az 1 lehet prímszámnál.

2011. máj. 4. 19:46
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
azért lesz kettő mert a prímszámoknak 2 osztójuk van 1 és önmaga és ez 2 és 1-től megy de megpróbáltam úgy is h a for ciklust 2-től indítottam és akkor a feltételt e=1 re írtam, de úgy se , nem itt van a hiba
2011. máj. 4. 20:17
 3/6 anonim ***** válasza:
2-ről indítod és e=0 a feltétel. Azért, mert ha a gyökéig mész sosem éred el "önmagát".
2011. máj. 4. 20:31
Hasznos számodra ez a válasz?
 4/6 anonim ***** válasza:

Egy szám akkor prím, ha nem osztható a gyökénél kisebb egyik prímszámmal sem.


És nem pedig "egy szám akkor prím, ha a keresendő legnagyonn lehetséges prímszám (n) gyökéig lévő prímek közül egyikkel sem osztható" :P



Az előző válaszolónak igaza van. Viszont a programod azért jó kb. 150-ig, mert gyök alatt 100000 = 100.

A programodban az ennél kisebb számoknál mindig elmész 100-ig.


Amúgy prímkeresésre ennél jobb módszer is van:

[link]


Bár több memóriát eszik... viszont jóval gyorsabb ennél.

2011. máj. 4. 20:42
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:

most ott tartok, hogy a sima prímszámkereső program jól működik, de ez a prímkeresés egy programnak csak az egyik része lenne, és ott nem működik, esetleg, ha valaki ezt megnézni akkor megköszönném, remélem átlátható lesz nagyjából :


Sub primkereses()

Dim ki As New StreamWriter("primszam.txt")

Dim e As Integer

Dim d As Integer

Dim gyok As Integer

gyok = Val(szam ^ 0.5)


For kl As Integer = tombtxt.Max + 1 To szam

e = 0

For d = 1 To gyok

If (kl Mod d) = 0 Then

e = e + 1

End If

Next

If e = 0 Then

ki.WriteLine(kl)

q1 = q1 + 1

'WriteLine(kl)

End If


Next

ki.Close()

End Sub


itt viszont rossz eredményeket hoz ki (itt a programban kéri be a számot amíg számoljon) ez egész program (ez csak 1 szelete) egy ciklusra épül és mindig a tombtxt nevű tömb-be menti el a prímeket és akkor ha indul a program megnézi, hogy a tömbbe mekkora a legnagyobb szám (az az utolsó kiszámolt prím) és onnantól az új számig keresse meg a prímeket. remélem érthető :D

2011. máj. 4. 21:22
 6/6 anonim ***** válasza:
Megint elrontottad. Ha 1-től indulsz akkor nincs olyan szám aminek a madaréka 1-el osztva 0.
2011. máj. 5. 10:42
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!