che procedimento posso usare (in vb5) per trovare i divisori di un numero inserito?
grazie
ciao
che procedimento posso usare (in vb5) per trovare i divisori di un numero inserito?
grazie
ciao
E poi Martina lavava l'anitra miope!
Pi greco
x è il tuo numero.Originariamente inviato da fisica
che procedimento posso usare (in vb5) per trovare i divisori di un numero inserito?
grazie
ciao
L'array "divisori" contiene gli elementi cercati.codice:Dim divisori() As Integer, i As Integer Dim x As Integer ReDim divisori(0) As Integer divisori(0) = 1 For i = 2 To x If x Mod i = 0 Then ReDim Preserve divisori(UBound(divisori) + 1) As Integer divisori(UBound(divisori)) = i End If Next i
:master: Però credo che gli interessino solo i numeri primi (scomposizione). O no?Originariamente inviato da Kylnas
x è il tuo numero.
L'array "divisori" contiene gli elementi cercati.codice:Dim divisori() As Integer, i As Integer Dim x As Integer ReDim divisori(0) As Integer divisori(0) = 1 For i = 2 To x If x Mod i = 0 Then ReDim Preserve divisori(UBound(divisori) + 1) As Integer divisori(UBound(divisori)) = i End If Next i![]()
riletto il problema e modifico, in effetti mi servivano i divisori primi^^
E poi Martina lavava l'anitra miope!
Pi greco
Ho trovato questa funzione non l'ho provata a te l'onore!!!!
codice:' return an array with the first N prime numbers Function PrimeArray(numberOfPrimes As Long) As Long() Dim found As Long, n As Long, i As Long If numberOfPrimes <= 0 Then Err.Raise 1002, , "Invalid argument" ' we know the size of the result in advance ReDim result(1 To numberOfPrimes) As Long ' "2" is the first prime number result(1) = 2: found = 1 n = 1 Do While found < numberOfPrimes ' all other prime numbers are odd, so we can skip even numbers n = n + 2 ' let's check if N is a prime number For i = 1 To found If (n Mod result(i)) = 0 Then Exit For Next If i > found Then ' no prime number < N is a divisor for N, therefore N is prime found = found + 1 result(found) = n End If Loop PrimeArray = result End Function![]()
Ho fatto un progettino di esempio, serve un form con un command button e 2 textbox. in text1 metti il numero da scomporre, in text2 ti esce la scomposizione.
nel modulo del form metti questo codice.
codice:Option Explicit Dim nPrimi() As Integer 'array di numeri primi Public Function EstrainPrimi(finoA As Integer) 'questa function carica l'array dei numeri primi Dim x As Integer Dim div() As Integer ReDim nPrimi(0) nPrimi(0) = 2 For x = 3 To finoA Step 2 '(step 2 per evitare i numeri pari) If Not Scomponi(x, div) Then 'numero primo ReDim Preserve nPrimi(UBound(nPrimi) + 1) 'aggiungo numero primo nPrimi(UBound(nPrimi)) = x End If Next x End Function Public Function Scomponi(n As Integer, ByRef div() As Integer) As Boolean 'Carica un array con la scomposizione del numero Dim ok As Boolean Dim x, y As Integer If n < 2 Then Exit Function ok = False y = 0 x = n ReDim div(0) div(0) = 1 While ok = False If x Mod nPrimi(y) = 0 Then 'divisibile ReDim Preserve div(UBound(div) + 1) 'aggiungo divisore div(UBound(div)) = nPrimi(y) x = x / nPrimi(y) 'continuo con scomposizione If x = 1 Then ok = True 'scomposizione terminata Else y = y + 1 'continuo con prossimo numero primo If UBound(nPrimi) < y Then Scomponi = False: Exit Function 'Impossibile scomporre End If Wend Scomponi = True 'scomposizione riuscita End Function Private Sub Command1_Click() Dim div() As Integer Dim x As Integer Dim sDiv As String Scomponi Text1.Text, div For x = 1 To UBound(div) sDiv = sDiv & div(x) & " * " Next x Text2.Text = Left(sDiv, Len(sDiv) - 2) End Sub Private Sub Form_Load() EstrainPrimi (100) End Sub![]()