/* C++ Programming, Example answer, Exercise 1, Sheet 5  */

/* Author: Rob Miller and William Knottenbelt
   Program last changed: 9th October 2001    */

/* This program tests to see if an integer is a prime between 1 and 1000 */

#include <iostream>
using namespace std;

enum Logical {False, True};

int get_valid_number();
Logical small_prime(int integer);
	
/* START OF MAIN PROGRAM */
int main() 
{
  int number;
	
  cout << "This program tests to see if an integer\n";
  cout << "is a prime between 1 and 1000.\n\n\n";

  number = get_valid_number();
  while (number != 0) {
    cout << "The number " << number << " is ";
    if (!small_prime(number))
      cout << "not ";
    cout << "a prime between 1 and 1000.\n\n";
    number = get_valid_number();
  } 
         
  return 0;
}
/* END OF MAIN PROGRAM */

/* FUNCTION TO READ IN A NUMBER FROM 0 TO 1000 */
int get_valid_number() 
{
  int number;
  do {
    cout << "Enter an integer between 1 and 1000 (incl) (or 0 to end program): ";		
    cin >> number;
    if (number < 0 || number > 1000)
      cout << "number out of range, try again!" << endl;
  } while (number < 0 || number > 1000);

  return number;
}

/* FUNCTION TO EVALUATE IF THE ARGUMENT IS A PRIME BETWEEN 1 AND 1000 */
Logical small_prime(int integer)
{
  for (int factor = 2; factor<integer; factor++) {
    if ((integer % factor) == 0) 
      return False;
  }
  return True;
}
      

