Numeri amicabili in C++
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.
HP 250 G9 Computer portatile 39,6 cm (15.6") 1366 x 768 Pixel Intel N4500 8 GB DDR4-SDRAM 256 GB SSD Wi-Fi Windows 11 Professional
279,50 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Hp Pc desktop i7 pronto all'uso,16 Gb Ram, ssd 512 Gb, DVD,Wi Fi, Office 2021 Windows 11 PRO,Computer fisso Pc i7
229,00 € (a partire da 18 Marzo 2024 14:59 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Apple 2021 iPad (10.2 Pollici, Wi-Fi + Cellular, 64GB) - Grigio Siderale (Ricondizionato)
379,00 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)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.
Apple iPad 9,7 (6th Gen) 128GB WiFi - Cellular - Grigio Siderale - Sbloccato (Ricondizionato)
250,88 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)Firma digitale Wacom DTU-1031X 2540lpi (Linee per Pollice) 222.72 x 125.28mm USB Nero, Grigio tavoletta Grafica (Ricondizionato)
200,00 € (a partire da 18 Marzo 2024 15:18 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)HP Laptop 15s-eq3000sl, AMD Ryzen 5 5625U, RAM 8GB DDR4, SSD NVMe 256GB, AMD Radeon, Display 15,6" Full HD, Antiriflesso, Wi-Fi, Bluetooth 5, Windows 11, Webcam HD, Lettore di Schede, Argento
399,99 € (a partire da 18 Marzo 2024 14:37 GMT +01:00 - Altre informazioniProduct prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on [relevant Amazon Site(s), as applicable] at the time of purchase will apply to the purchase of this product.)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++
3- Operatori di assegnazione in C++