
public class NumberPersonalities1 {

    public static void main(String[] args) {
        int limit = 100;
        int number = 0;
        
        while (number < 100) {
            number = number + 1;
            System.out.print(number + "    ");
            
            if (prime(number)) {
                System.out.print("prime, ");
            }
            else {
                System.out.print("composite, ");
            }

            if (happy(number)) {
                System.out.print("happy, ");
            }
            else {
                System.out.print("unhappy, ");
            }

            if (triangular(number)) {
                System.out.print("triangular, ");
            }
            else {
                System.out.print("not triangular, ");
            }

            if (square(number)) {
                System.out.print("square, ");
            }
            else {
                System.out.print("not square, ");
            }

            if (smug(number)) {
                System.out.print("smug, ");
            }
            else {
                System.out.print("not smug, ");
            }

            if (honest(number)) {
                System.out.println("honest");
            }
            else {
                System.out.println("dishonest");
            }
        }

    }

    private static boolean prime(int number) {
        int divisor = 2;
        if (number == 1) return false;
        while (divisor < number) {
            if (number % divisor == 0) return false;
            divisor = divisor + 1;
        }
        return true;
    }

    private static boolean happy(int number) {
        int sum;
        while (true) {
            sum = 0;
            while (number > 0) {
                int digit = number % 10;
                number = number / 10;
                sum = sum + digit * digit;
            }
            if (sum == 1) return true;
            if (sum == 4) return false;
            number = sum;
        }
    }

    private static boolean triangular(int number) {
        int subtract = 1;
        while (number > 0) {
            number = number - subtract;
            subtract = subtract + 1;
        }
        return number == 0;
    }

    private static boolean square(int number) {
        int subtract = 1;
        while (number > 0) {
            number = number - subtract;
            subtract = subtract + 2;
        }
        return number == 0;
    }

    private static boolean smug(int number) {
        int n = 1;
        int square = n * n;
        while (number > square) {
            if (square(number - square)) return true;
            n = n + 1;
            square = n * n;
        }
        return false;
    }

    private static boolean honest(int number) {
        int divisor = 2;
        while (divisor < number) {
            int quotient = number / divisor;
            if ((number / divisor == divisor) &&
                    quotient * quotient != number) {
                return false;
            }
            divisor = divisor + 1;
        }
        return true;
    }
}
