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;
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++
Per cosa stanno div e s?*
div è il divisore, mentre s è la somma