In questa lezione realizzeremo un algoritmo sui numeri amicabili in C++, ovvero quei due numeri per i quali la somma dei divisori propri dell’uno è uguale all’altro e viceversa.
Per divisori propri si intendono tutti i divisori tranne il numero stesso.
Facciamo un esempio di numeri amicabili, considerando i numeri 220 e 284.
Il numero 220 ha come divisori propri: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 e 110.
Se sommiamo questi divisori otteniamo il numero 284.
Allo stesso modo, prendiamo il numero 284, questo ha come divisori: 1, 2, 4, 71, 142. Sommandoli otteniamo il numero 220.
Ecco dunque che i numeri 220 e 284 sono amicabili
Algoritmo per i numeri amicabili in C++
Prendere in input due numeri e visualizzare sullo schermo se sono amicabili.
Innanzitutto dichiariamo le variabili che ci servono:
a, b – Sono le due variabili intere che indicano i numeri per cui vogliamo verificare l’ipotesi iniziale.
div – Rappresenta il divisore che, partendo da 1, verrà incrementato opportunamente all’interno dei cicli.
s – Rappresenta la variabile che contiene la somma dei divisori.
Dopo aver dichiarato le variabili, chiediamo all’utente di inserirle in input, poi impostiamo il div a 1 e la somma a 0 (ciò si poteva fare anche prima).
Impostiamo nel ciclo while la condizione che div sia minore o uguale al primo numero. Dunque, finché questa condizione è vera, troviamo tutti i divisori di un numero e li sommiamo nella variabile s.
Dopo controlliamo se la somma così ottenuta è uguale al primo numero.
Se ciò è verificato allora procediamo a trovare i divisori del secondo numero e confrontiamo se la loro somma è uguale al primo numero.
Solo se questa condizione è verificata allora i due numeri sono amicabili.
Ecco dunque il codice completo che rappresenta l’algoritmo sui numeri amicabili in C++:
#include <iostream>
using namespace std;
int main() {
int a, b, div, s;
cout << "Inserisci un numero: ";
cin >> a;
cout << "Inserisci il secondo numero: ";
cin >> b;
div = 1;
s = 0;
while (div <= a / 2) {
if (a % div == 0) {
s += div;
}
div++;
}
if (s == b) {
div = 1;
s = 0;
while (div <= b / 2) {
if (b % div == 0) {
s += div;
}
div++;
}
if (s == a) {
cout << "I due numeri sono amicabili";
} else {
cout << "I numeri non sono amicabili";
}
} else {
cout << "I numeri non sono amicabili";
}
return 0;
}
Chiaramente si poteva procedere in altri modi per trovare la soluzione all’algoritmo sui numeri amicabili in C++, proponete pure la vostra nei commenti sotto.
Alcuni link utili
Indice argomenti linguaggio C++
1- Introduzione al linguaggio C++
3- Operatori di assegnazione in C++
Successione di Fibonacci in C++
Per cosa stanno div e s?*
div è il divisore, mentre s è la somma