#include<stdlib.h>
#include<stdio.h>
#include<math.h>
int main( void )

/*
Ten program sprawdzi, czy podana liczba jest pierwsza. Sposób sprawdzania jest następujący.
Najpierw sprawdzamy, czy liczba jest parzysta. Jeżeli jest, to nie jest pierwsza, i następuje
szybki koniec. Następnie badamy podzielność przez kolejne nieparzyste. Robimy to w pętli while(),
gdzie warunkiem końcowym jest d>sqrt(n). Jeżeli znajdziemy podzielnik, to pętlę (i program) kończymy.
*/

{
	long n;   /*  To będzie nasza zadana przez użytkownika liczba do sprawdzenia.   */
	long d;   /*  To będzie pomocnicza zmienna, zawierająca potencjalny dzielnik n.   */
	char test='t'; /* Ta zmienna będzie zawierała odpowiedź użytkownika, czy chce kontynuować.  */
	int flag=0; /*  To jest flaga, jeżeli znajdziemy dzielnik, to ustawiamy flag=1. Przyda się. */
	printf("Ten program sprawdza, czy podana liczba jest pierwsza\n\n\n");
	while(test=='t')
	{
		printf("Proszę podać liczbę naturalną\n\n\n");
		scanf("%ld",&n);
		printf("Podana liczba: %ld\n\n\n",n);
		flag=0;
		d=3;
		if (n%2==0&&n!=2)
			printf("Liczba %ld jest liczbą złożoną: jej dzielnikiem jest 2\n\n\n",n);
		else
		{
			while(d<=sqrt(n))
			{
				if(n%d==0)
				{
					printf("Liczba %ld jest liczbą złożoną: jej dzielnikiem jest %ld\n\n\n",n,d);
					flag=1;
					break;
				}
				else
					d+=2;
			}
			if (flag==0)
			printf("Liczba %ld jest liczbą pierwszą\n\n\n",n);
		}
		printf("Czy chcesz kontynuować? [t/n]\n\n\n");
		scanf("%c",&test);
		while((test!='t')&&(test!='n'))
			scanf("%c",&test);
	}
	printf("Do widzenia!\n\n\n");
	return EXIT_SUCCESS;
}