Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    vb5: divisori di un numero

    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

  2. #2

    Re: vb5: divisori di un numero

    Originariamente inviato da fisica
    che procedimento posso usare (in vb5) per trovare i divisori di un numero inserito?

    grazie

    ciao
    x è il tuo numero.
    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
    L'array "divisori" contiene gli elementi cercati.

  3. #3

    Re: Re: vb5: divisori di un numero

    Originariamente inviato da Kylnas
    x è il tuo numero.
    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
    L'array "divisori" contiene gli elementi cercati.
    :master: Però credo che gli interessino solo i numeri primi (scomposizione). O no?

  4. #4
    riletto il problema e modifico, in effetti mi servivano i divisori primi^^
    E poi Martina lavava l'anitra miope!

    Pi greco

  5. #5
    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

  6. #6
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.