Newsgroup: it.comp.lang.visual-basic
Titolo: Scomposizione in fattori primi

Qual'è il codice più semplice per scomporre un numero nei suoi fattori
primi?
Ne ho uno che utilizza i vettori ma è troppo complicato per me...
Grazie

 primi?
Io, dato un numero "n", controllerei tutti i numeri partendo da 2 fino a 
n/2.
Ovviamente poi i fattori primi che trovi devi memorizzarli da qualche 
parte (un vettore) e contare tutte le volte in cui il numero può essere 
diviso per quel fattore primo che trovi.
A meno che non ti serva solo un output visivo...
Prova con:
Private Sub FattoriPrimi(ByVal N As Long)
Dim Fatt As Long, Count As Long, I As Long, Max As Long
     If N > 0 Then
         If N > 1 Then
             Max = N \ 2
             For I = 2 To Max
                 Fatt = I
                 Count = 0
                 While (N Mod Fatt) = 0 And N <> 0
                     Count = Count + 1
                     N = N \ Fatt
                 Wend
                 If Count > 0 Then Print Fatt & IIf(Count > 1, "^" & 
Count, "")
             Next I
         End If
     End If
End Sub
Un consiglio: impara ad utilizzare i vettori :)
-- 
Rivolterò il mondo per trovarlo, e anche se andasse in Indocina uno dei 
nostri starà nascosto in una ciotola di riso pronto a sparargli nel culo.
(Pulp Fiction)

 n/2.
E' sufficiente arrivare a Sqrt(n).
Sqrt(n) è il fattore più grande di un qualsiasi numero.
Ciao

In data Thu, 29 Apr 2004 18:08:15 +0200, Problem Child: scrisse:

Questa mia calcola la somma di tutti i divisori;
Modificando un paio di righe puoi stampare tutti i divisori.
Function °°(ByVal ° As Long) As Long
Dim °°°° As Long
Dim °°° As Long
Dim °°°°° As Long
Select Case °
    Case Is > 2
        °°° = 1
        For °°°° = 2 To Int(Sqr(°))
            If ° Mod °°°° = 0 Then
                °°°°° = ° \ °°°°
                °°° = °°° + °°°° + °°°°°
                If °°°°° <= °°°° Then
                    If °°°° = °°°°° Then
                        °°° = °°° - °°°°
                    Else
                        °°° = °°° - °°°° - °°°°°
                    End If
                    Exit For
                End If
            End If
        Next
        °° = °°°
        Exit Function
    Case 1
        °° = 0
    Case 2
        °° = 1
    Case Is < 1
        °° = 0
End Select
End Function
termoPilucco

Modificando un paio di righe puoi stampare tutti i divisori.
...che non sono tutti fattori primi ^_^''''
termoPilucco

                 If °°°°° <= °°°° Then
Hanno riaperto le iscrizioni?
http://www.ioccc.org/main.html
;-)
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!


Vai qui: 
http://www.marcominerva.com/vbcorner/download/code/Maths.zip
Questo programmino,oltre che a calcolare il massimo comun denominatore e il
minimo comune multiplo,fa anche la scomposizione in fattori primi
Cè il sorgente cosi puoi studiartelo bene ;-)
Ciao e buon lavoro Vincenzo


è proprio quello ke avevo io ;-)... ma utilizza i vettori...e io non sono
ancora all'altezza. :(
Grazie cmq a tutti!


Non lo sapevo :-o
Sorry :-(
Ciao

 sono ancora all'altezza. :(
Beh, il tempo di scirvere un messaggio come questo e li imparavi...
termoPilucco

 termoPilucco
Dai termoPilucco,il ragazzo è alle primissime armi ;-)
Hai percaso qualche soluzione più semplice che non usi i vettori?
Salviamolo senno il professore gli mette un bel 2 e lo boccia :-))
Ciao

 Salviamolo senno il professore gli mette un bel 2 e lo boccia :-))
Eccheccacchio!!! E il codice che ho postato io?


 Salviamolo senno il professore gli mette un bel 2 e lo boccia :-))
Ecco, io una ha volta ho preso 1, ma un'altra ho preso 10.
Le materie erano diverse, però :)
Comunque, se usa una delle nostre soluzioni, il professore lo sgama...
termoPilucco


Dici che lo sgama ? :-o 'azz !!!

 Dici che lo sgama ? :-o 'azz !!!
Certo, basta che dia un'occhiata su gugol e trova i post con la soluzione
del suo problematico bambino.
termoPilucco

  If Count > 0 Then Print Fatt & IIf(Count > 1, "^" & Count, "")
Ok... sono arrivato qui e ho sostituito "Print" con LblRisultato.Caption =(e
ho inserito tutto tra parentesi).
Tutto va bene se scompongo numeri come 8(2^3), 9(3^2), 25(5^2), 64(2^6)
etc... ma se voglio scomporre, per esempio, 85 mi da solo 17.... oppure 39
mi da 13 e cosi via...
Cosa devo fare per far uscire ad esempio 85 = 17*5... oppure 425 =
17*(5^2)... etc
Grazie (spero di non rompere troppo)....