I 100 libri da non perdere

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++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++