Autor
		 | 
		
			Tema: [SNIPPET+RETO] IsItPrime() - Comprobar si un numero es primo  (Leído 19,401 veces)
		 | 
	 
 
	
		
			
				
					
						
							Karcrack
							
								       
								
								  Desconectado
								Mensajes: 2.416
								
								 
								Se siente observado ¬¬'
								
								
								
								
								
								  
							 
						 | 
						
							
							 
							
Bueno, me hacia falta hacer una funcion de este tipo para un trabajito que estoy haciendo   ... y he pensado que tal vez os seria util... Public Function IsItPrime(ByVal lNumber As Long) As Boolean     Dim i       As Long       If (lNumber > 2) And (lNumber Mod 2) Or (lNumber = 2) Then         For i = 2 To (lNumber ^ 0.5)             If (lNumber Mod i) = 0 Then                 GoTo Exit_             End If         Next i         IsItPrime = True     End If Exit_: End Function 
 
 Podriamos hacer un jueguecito... a ver quien lo hace mas rapido/corto    Os apuntais? MOD: Yo utilizo este codigo para comprobar lo optimizado que esta: Option Explicit
  Private n       As Long
  Private Sub Form_Load()     Dim x       As Long          Timer1.Interval = 10     Timer1.Enabled = True     For x = 0 To 10 ^ 6         Call IsItPrime(x)         DoEvents     Next x     Timer1.Enabled = False     MsgBox n * 10 & " ms" End Sub
  Public Function IsItPrime(ByVal lNumber As Long) As Boolean     Dim i       As Long          If (lNumber > 2) And (lNumber Mod 2) Or (lNumber = 2) Then         For i = 2 To (lNumber ^ 0.5)             If (lNumber Mod i) = 0 Then                 GoTo Exit_             End If         Next i         IsItPrime = True     End If Exit_: End Function
  Private Sub Timer1_Timer()     n = n + 1 End Sub 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Última modificación:  7 Julio 2010, 13:04 pm por Karcrack »
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							cbug
							
								
								  Desconectado
								Mensajes: 147
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
If (lNumber > 2) And (lNumber Mod 2) Then Al 2 lo evalúas? Ahora en visual basic se puede modificar el long para que únicamente tome los enteros positivos?  
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Karcrack
							
								       
								
								  Desconectado
								Mensajes: 2.416
								
								 
								Se siente observado ¬¬'
								
								
								
								
								
								  
							 
						 | 
						
							
							 
							
If (lNumber > 2) And (lNumber Mod 2) Then Al 2 lo evalúas? Ahora en visual basic se puede modificar el long para que únicamente tome los enteros positivos? Cierto, habia olvidado que el 2 tambien es primo      ( Ahora lo corrijo Correjido   ) Se puede utilizar un Integer, aunque tambien acepta Negativos... Pero solo enteros    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Última modificación:  7 Julio 2010, 12:58 pm por Karcrack »
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							cbug
							
								
								  Desconectado
								Mensajes: 147
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Se puede utilizar un Integer, aunque tambien acepta Negativos... Pero solo enteros    Claro, porque de acuerdo a la definición, los números primos son aquellos números naturales que... Pero igual, tu código creo que es el más eficiente en cuanto a complejidad, no sé cómo se tratará el goto en vb realmente... sin embargo, creo que se parece mucho al de la criba de eratóstenes... Saludos!  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Dreamaker
							
								
								  Desconectado
								Mensajes: 277
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Me quedó una duda, en el primer  for lo haces hasta la raíz cuadrada del número para que sea más eficiente cierto? (Osea, tarde menos tiempo) Está bien aunque es sencillo, y no comprueba si el 1 es primo o no (no digas nada)    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Karcrack
							
								       
								
								  Desconectado
								Mensajes: 2.416
								
								 
								Se siente observado ¬¬'
								
								
								
								
								
								  
							 
						 | 
						
							
							 
							
Se puede utilizar un Integer, aunque tambien acepta Negativos... Pero solo enteros    Claro, porque de acuerdo a la definición, los números primos son aquellos números naturales que... Pero igual, tu código creo que es el más eficiente en cuanto a complejidad, no sé cómo se tratará el goto en vb realmente... sin embargo, creo que se parece mucho al de la criba de eratóstenes... Saludos! He pensado en usar la criba de Eratostenes pero es mas para generar una lista de primos, solo quiero comprobar si un número lo es   
 Me quedó una duda, en el primer  for lo haces hasta la raíz cuadrada del número para que sea más eficiente cierto? (Osea, tarde menos tiempo) Está bien aunque es sencillo, y no comprueba si el 1 es primo o no (no digas nada)   No es necesario recorrer cada numero, con llegar a la raiz es suficiente    No dire nada sobre el 1      
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Psyke1
							
								Wiki 
								
								  Desconectado
								Mensajes: 1.089
								
								 
								
								
								
								
								 
								 
							 
						 | 
						
							
							 
							
'0 ---> Invalido '1 ---> No Primo '2 ---> Primo Option Explicit Private Function Check_Prime_Number(ByVal lNumber As Long) As Byte     Dim x            As Long     If lNumber >= 2 Then         Check_Prime_Number = 2         For x = 2 To (lNumber ^ 0.5)             If (lNumber Mod x) = 0 Then                 Check_Prime_Number = 1                 Exit For             End If         Next     End If End Function 
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Última modificación:  7 Julio 2010, 14:51 pm por *PsYkE1* »
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Karcrack
							
								       
								
								  Desconectado
								Mensajes: 2.416
								
								 
								Se siente observado ¬¬'
								
								
								
								
								
								  
							 
						 | 
						
							
							 
							
@Psyke: Tu función es mucho mas lenta, ademas, no tiene en cuenta que el 2 es primo (como hacia la mia     ) No es necesario que recorras todos los números, con llegar a la raiz es suficiente    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Psyke1
							
								Wiki 
								
								  Desconectado
								Mensajes: 1.089
								
								 
								
								
								
								
								 
								 
							 
						 | 
						
							
							 
							
Ok, agradezco la correcion, lo no tuve en cuenta   Ahora lo corregi! Salu2!    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						| 
							cobein
							
						 | 
						
							
							 
							
Private Function CheckPrimality(ByVal lNum As Long) As Boolean     Dim i       As Long     Dim lSqr    As Long              If lNum Mod 2 = 0 Then GoTo Composite:
      lSqr = Sqr(lNum)
      i = 3     Do Until i > lSqr         If lNum Mod i = 0 Then GoTo Composite:         i = i + 2     Loop      Prime:     CheckPrimality = True     Exit Function Composite:     If lNum = 2 Then CheckPrimality = True End Function  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	 |  
 
	 
	
 
			 
			
				
					
						| Mensajes similares | 
					 
					
						 | 
						Asunto | 
						Iniciado por | 
						Respuestas | 
						Vistas | 
						Último mensaje | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Verdad que es imposible el algoritmo numero primo sin usar ciclos, ni funciones.
							« 1 2 » 
							Programación General
						 | 
						
							Aikanáro Anário
						 | 
						
							11
						 | 
						
							12,811
						 | 
						
							 
							
								20 Agosto 2011, 01:12 am 
								por someRandomCode
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Factor primo más grande de un número muy largo
							 
							Programación C/C++
						 | 
						
							DickGumshoe
						 | 
						
							9
						 | 
						
							9,944
						 | 
						
							 
							
								 5 Julio 2012, 04:01 am 
								por do-while
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Descubren el mayor número primo: 17 millones de dígitos
							 
							Noticias
						 | 
						
							wolfbcn
						 | 
						
							2
						 | 
						
							3,401
						 | 
						
							 
							
								 7 Febrero 2013, 22:31 pm 
								por anonimo12121
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							Como saber si un numero grande es primo o no
							 
							Dudas Generales
						 | 
						
							Luish@o
						 | 
						
							1
						 | 
						
							7,552
						 | 
						
							 
							
								18 Septiembre 2016, 18:25 pm 
								por engel lex
							
						 | 
					 
					
						
							 
						 | 
						
							 
						 | 
						
							AYUDA! Verificar si un numero es par/impar , compuesto/primo
							 
							Programación C/C++
						 | 
						
							NicoSanhueza
						 | 
						
							1
						 | 
						
							2,287
						 | 
						
							 
							
								 7 Mayo 2018, 17:51 pm 
								por Serapis
							
						 | 
					 
				 
			    |