/*
AUTORE: Manuel Vichi
Esercizi 30 ottobre
*/
#include <iostream>
#define EC(n)  1+3*(n)*((n)-1)
using namespace std;
// Funzione per verificare se il numero è esagonale centrale
bool esagonalecentrato(int n) {
//   	bool esagonalecentrato2 = false; // Un bool in più non fa mai male
    for(int k = 1; n > EC(k); ++k)
        ;
    return n == EC(k);
}
// Funzione per stampare i numeri esagonali centrati
void stampaesagonalicentrati() {
	cout << endl << "Primi 10 numeri esagonali centrati: " << endl;
	for(int k = 1; k <= 10; ++k) //Da 1 a 10 (0 non può essere esagonale centrato)
        cout << EC(k) << " "; // Stampa l'esagonale centrato
    cout << endl; // Per aumentare la visibilità dell'output
}
// Funzione per verificare se il numero è primo
bool isPrimeNumber(int num) {
    if (num <= 1)
		return false; // 0 e 1 non sono primi
    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0)
			return false; // Se num è divisibile per i, non è primo
    }
    return true; // Se non ci sono divisori, è primo
}
// Funzione principale
int main(void) {
	int n;
	cout << "Inserisci un numero: ";
    cin >> n;
	cout << endl; // Per aumentare la visibilità dell'output
	if (esagonalecentrato(n)) {
        cout << "Il numero " << n << " e' esagonale centrato." << endl;
    }
    else {
        cout << "Il numero " << n << " non e' esagonale centrato." << endl;
    }
    stampaesagonalicentrati();
    cout << endl; // Per aumentare la visibilità dell'output
    if (isPrimeNumber(n)) {
    	cout << "Il numero " << n << " e' primo." << endl;
    }
    else {
    	cout << "Il numero " << n << " non e' primo." << endl;
	}
	return 0; // Uscita normale con codice 0
}
