Convertire un numero da base 10 a base arbitraria
Salve a tutti.
Volevo sapere come posso effettuare il cambio di base, senza utilizzare il metodo delle divisioni.
Mi spiego meglio:
Con il metodo delle divisioni, se ho un il numero 154699 in base 10 e lo voglio convertire in base 30, basta fare le divisioni:
quindi il numero 154699 in base 10 risulta essere 5 * 30^3 + 21 * 30^2 + 23 * 30 + 19
Esiste una procedura alternativa a questa?
Magari con le matrici???
Volevo sapere come posso effettuare il cambio di base, senza utilizzare il metodo delle divisioni.
Mi spiego meglio:
Con il metodo delle divisioni, se ho un il numero 154699 in base 10 e lo voglio convertire in base 30, basta fare le divisioni:
n resto -------------------- 154699 19 5156 26 171 21 5 5 0
quindi il numero 154699 in base 10 risulta essere 5 * 30^3 + 21 * 30^2 + 23 * 30 + 19
Esiste una procedura alternativa a questa?
Magari con le matrici???
Risposte
Puoi sostituire tranquillamente le divisioni e i calcoli dei moduli con delle sottrazioni. Ti basta partire dall'alto invece che dal basso.
In questo caso trovi la prima potenza di \(30\) che è maggiore di \(154699\), ovvero \(810000\). A questo primo prendi quella subito precedente, ovvero \(27000\), e conti quante volte la puoi "togliere" a \(154699\) prima che il risultato sia negativo. Alla fine del processo dovresti trovare che \(154699 = 27000\times 5 + 19699\). E quindi prosegui di questo passo. Se il tuo scopo è rendere il tutto più rapido su un computer, non sono sicuro che questo procedimento raggiunga l'obiettivo, o almeno non sempre lo fa.
In questo caso trovi la prima potenza di \(30\) che è maggiore di \(154699\), ovvero \(810000\). A questo primo prendi quella subito precedente, ovvero \(27000\), e conti quante volte la puoi "togliere" a \(154699\) prima che il risultato sia negativo. Alla fine del processo dovresti trovare che \(154699 = 27000\times 5 + 19699\). E quindi prosegui di questo passo. Se il tuo scopo è rendere il tutto più rapido su un computer, non sono sicuro che questo procedimento raggiunga l'obiettivo, o almeno non sempre lo fa.
Grazie per la risposta,
ma vorrei sapere se esiste un metodo che utilizza le matrici, in tal caso potrei evitare elevamenti a potenza e divisioni, e potrei lavorare soltanto sui coefficenti
ma vorrei sapere se esiste un metodo che utilizza le matrici, in tal caso potrei evitare elevamenti a potenza e divisioni, e potrei lavorare soltanto sui coefficenti
Le matrici si riferiscono ad applicazioni lineari. I rapporti tra numeri di base diversa è di tipo polinomiale.
Ok, quindi non esiste un metodo, al di fuori dei due, precedentemente descritti in questa discussione?
Secondo me la questione è molto più profonda e paradossalmente molto più semplice.
Almeno in questo ambito, le potenze sono moltiplicazioni ripetute e le divisioni sono algoritmi in cui il set delle istruzioni elementari è rappresentato da moltiplicazioni e somme. Evitare potenze e divisioni significherebbe in buona sostanza evitare moltiplicazioni e somme. Ora: ammesso ma non concesso che esista un algoritmo che permetta di mettere in forma di matrice le cifre che compaiono nella rappresentazione decimale di un certo numero, come si fa poi a lavorare su tali cifre, che a questo punto rappresentano ciascuna un numero, senza usare le addizioni e le moltiplicazioni?
Almeno in questo ambito, le potenze sono moltiplicazioni ripetute e le divisioni sono algoritmi in cui il set delle istruzioni elementari è rappresentato da moltiplicazioni e somme. Evitare potenze e divisioni significherebbe in buona sostanza evitare moltiplicazioni e somme. Ora: ammesso ma non concesso che esista un algoritmo che permetta di mettere in forma di matrice le cifre che compaiono nella rappresentazione decimale di un certo numero, come si fa poi a lavorare su tali cifre, che a questo punto rappresentano ciascuna un numero, senza usare le addizioni e le moltiplicazioni?
Faccio un sunto:
Vorrei sapere se esiste un metodo ( anche tramite matrici di trasformazione ) per risolvere un eguaglianza polinomiale del tipo
[tex]x_{n-1}a^{n-1} + ... + x_1a + x_0 = y_{m-1}b^{m-1} + ... + y_1b + y_0[/tex]
Esempio:
[tex]a = 10[/tex]
[tex]b = 32[/tex]
[tex]x = x_{n-1}, x_{n-2}, ... , x_1, x_0 = 1, 5, 0, 0, 9, 9[/tex]
[tex]y = y_{m-1}, y_{m-2}, ... , y_1, y_0 = 4, 18, 18, 19[/tex]
Credo che il problema potrebbe essere visto anche come
\[
\begin{bmatrix}
x_{n-1} & x_{n-2} & ... & x_1 & x_0
\end{bmatrix}
\begin{bmatrix}
a^{n-1} \\ a^{n-2} \\ ... \\ a \\ 1
\end{bmatrix}
=
\begin{bmatrix}
y_{m-1} & y_{m-2} & ... & y_1 & y_0
\end{bmatrix}
\begin{bmatrix}
b^{m-1} \\ b^{m-2} \\ ... \\ b \\ 1
\end{bmatrix}
\]
Mi chiedo se sia possibile risolvere il problema con una cosa del genere
\[
\begin{bmatrix}
y_{m-1} & y_{m-2} & ... & y_1 & y_0
\end{bmatrix}
=
\begin{bmatrix}
t_{00} & t_{10} & ... & t_{k0} \\
t_{01} & t_{11} & ... & t_{k1} \\
... & ... & ... & ... \\
t_{0k} & t_{1k} & ... & t_{kk}
\end{bmatrix}
\begin{bmatrix}
x_{n-1} \\ x_{n-2} \\ ... \\ x_1 \\ x_0
\end{bmatrix}
\]
Vorrei sapere se esiste un metodo ( anche tramite matrici di trasformazione ) per risolvere un eguaglianza polinomiale del tipo
[tex]x_{n-1}a^{n-1} + ... + x_1a + x_0 = y_{m-1}b^{m-1} + ... + y_1b + y_0[/tex]
Esempio:
[tex]a = 10[/tex]
[tex]b = 32[/tex]
[tex]x = x_{n-1}, x_{n-2}, ... , x_1, x_0 = 1, 5, 0, 0, 9, 9[/tex]
[tex]y = y_{m-1}, y_{m-2}, ... , y_1, y_0 = 4, 18, 18, 19[/tex]
Credo che il problema potrebbe essere visto anche come
\[
\begin{bmatrix}
x_{n-1} & x_{n-2} & ... & x_1 & x_0
\end{bmatrix}
\begin{bmatrix}
a^{n-1} \\ a^{n-2} \\ ... \\ a \\ 1
\end{bmatrix}
=
\begin{bmatrix}
y_{m-1} & y_{m-2} & ... & y_1 & y_0
\end{bmatrix}
\begin{bmatrix}
b^{m-1} \\ b^{m-2} \\ ... \\ b \\ 1
\end{bmatrix}
\]
Mi chiedo se sia possibile risolvere il problema con una cosa del genere
\[
\begin{bmatrix}
y_{m-1} & y_{m-2} & ... & y_1 & y_0
\end{bmatrix}
=
\begin{bmatrix}
t_{00} & t_{10} & ... & t_{k0} \\
t_{01} & t_{11} & ... & t_{k1} \\
... & ... & ... & ... \\
t_{0k} & t_{1k} & ... & t_{kk}
\end{bmatrix}
\begin{bmatrix}
x_{n-1} \\ x_{n-2} \\ ... \\ x_1 \\ x_0
\end{bmatrix}
\]