I migliori prodotti

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

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++