#include <stdio.h>

/// funzioni booleane

int pari(int n) ///ritorna vero se n e' pari
{
    if (n % 2 == 0)
        return 1;
    else
        return 0;
}

int eprimo(int n)
{
    int d; /// divisore
    for(d=2; d <= n/2; d++)
    {
        if (n%d ==0)   /// non da resto diviso per d
            return 0; /// non primo
    }
    return 1;   /// finito il ciclo, so che e' primo
}

int dispari(int n)
{
    return  !pari(n);  /// ritorna NON pari(n)
}


double fattoriale(int n)
{
    double fat =1.0;
    int i;
    for(i=2; i <= n; i++)
        fat=fat*i;
    return fat;
}




int efattoriale(int n)
{
    int d; /// d e' un valore
    for(d=1; d < n/2; d++)
    {
        if (fattoriale(d)==n)   /// d! e' uguale a n
            return d; /// se fattoriale(5) == 120 e n == 120 ritorna 5
    }
    return 0;   /// finito il ciclo, so che n non e' un fattoriale
}

int binario(int n)
{
    while(n>0)
    {
        if (n % 10 >1)
            return 0;
        n/=10;
    }
    return 1;
}

main()
{
    int num;
    int acapo=0; /// falso
	int f;
    do
    {
        printf("Dammi un numero->");
        scanf("%d",&num);

        if (dispari(num))
            printf("Dispari\n");
        else
            printf("Pari\n");
        if (eprimo(num))
            printf("Primo\n");
        else
            printf("Non primo\n");
		f = efattoriale(num);
		if(f==0)
			printf("%d  non e' un fattoriale", num);
		else
			printf("%d e' il fattoriale di %d\n",num,f);
		if (binario(num)
			printf("%d e' binario\n",num);
		else
			printf("%d non e' binario\n",num);
		else
		
        if (num == 0) break;

    }while(1);

    printf("Numeri primi <= 1000:\n");
    for(num=0; num <=1000; num++)
    { /// stampane 10 per riga
            if (eprimo(num))
            {
                printf("%4d ",num);
                acapo++;
            }
            if(acapo==10)
            {
                printf("\n");
                acapo=0;
            }
    }
    return 0;
}

