webForumDet fria alternativet

Primtal?

7 svar · 975 visningar · startad av racce

racceMedlem sedan juni 200029 inlägg
#1

Hej!
Hur tar man reda på om ett tal är primtal? Jag har gjort ett litet program i miniräknaren för att kolla det. Det tar oerhört lång tid och jag vet inte ens om det fungerar som det ska.
Jag undrar om det finns ett bättre sätt att ta reda på primtal än med min miniräknarkod.

Prompt P

If (P/2)=iPart(P/2)
Then
Disp 2
Stop
End

For(C,3,rot(p),2)

If iPart(P/C)=(P/C)
Then
C->S
End
If S>1
Then
Disp S
Stop
End

Output(8,10,(iPart((C/rot(P))*100)))

End

Disp S

Är det nån som vet hur man gör med ASP och hur VBscriptkoden ska se ut. Nån kan ju tipse mig om miniräknarkoden med.

---------------------------------------
Texas Instruments TI-83 Plus

kristofferMedlem sedan juni 20001 257 inlägg
#2

Du kan testa om ett udda heltal n är ett primtal i Java med följande metod:

public static boolean isPrime(long n)
{
 for(long i=3; i*i<=n; i+=2)
  if(n%i == 0)
   return false;
 return true;
}

Algoritmen är snabb för små (32-bitars) tal men oanvändbar för jämna 64-bitars longs.
Det finns andra snabbare metoder också men oftast kräver de kunskap om talteori, såsom Fermats lilla sats mm, för att kunna förstås.

------------------
http://www.gratistavlingar.com

[Redigerat av kristoffer den 22 jan 2001]

cascaMedlem sedan feb. 20005 891 inlägg
#3

Du kan testa om ett udda heltal n är ett primtal i Java med följande metod:

Är inte det här ASP-forumet? :o

------------------
Rökare är som vanliga människor, fast inte lika länge.

kristofferMedlem sedan juni 20001 257 inlägg
#4

Jo, men eftersom frågeställaren huvudsakligen undrade hur man kollar om ett tal är ett primtal så kunde Java-koden beskriva en sådan lösning.

------------------
http://www.gratistavlingar.com

emissionMedlem sedan dec. 19996 721 inlägg
#5

I VBScript..

function isPrime(mVal)
    dim i : i=3
    if mVal < 2 then 
		isPrime = false
	else
		isPrime = true
		mValSQR=sqr(mVal)
		while i<=mValSQR
			if mVal mod i=0 then
				isPrime = false
				exit function
			end if
			i = i + 2
		wend
	end if
end function

[Redigerat av emission den 22 jan 2001]

kristofferMedlem sedan juni 20001 257 inlägg
#6

Nja, du behöver inte iterera ett steg i taget eftersom ett primtal aldrig kan vara jämnt. Byt

i = i + 1

mot

i = i + 2

och börja på i = 3 istället.

------------------
http://www.gratistavlingar.com

[Redigerat av kristoffer den 22 jan 2001]

emissionMedlem sedan dec. 19996 721 inlägg
#7

Så sant. Skriptet är modifierat.

racceMedlem sedan juni 200029 inlägg
#8

Tack! Tänkte om det fanns ett effektivt sätt att få reda på det. Men det går ju iaf relativt fort att få reda på små primtal.
Får använda mig av emmissions funktion eller nån liknande.

Smileys: :) ;) :P

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)