import java.util.Random; public class SatPrimes01 { // Multiplies two integers n and m static int mult(int n, int m) { if (m < 0) { return mult(n, -m); } if (m == 0) { return 0; } if (m == 1) { return 1; } return n + mult(n, m - 1); } // Is n a multiple of m? static int multiple_of(int n, int m) { if (m < 0) { return multiple_of(n, -m); } if (n < 0) { return multiple_of(-n, m); // false } if (m == 0) { return 0; // false } if (n == 0) { return 1; // true } return multiple_of(n - m, m); } // Is n prime? static int is_prime(int n) { return is_prime_(n, n - 1); } static int is_prime_(int n, int m) { if (n <= 1) { return 0; // false } else if (n == 2) { return 1; // true } else { if (m <= 1) { return 1; // true } else { if (multiple_of(n, m) == 0) { return 0; // false } return is_prime_(n, m - 1); } } } public static void main(String[] args) { Random rand = new Random(42); int n = rand.nextInt(); if (n < 1 || n > 46340) { return ; } int result = is_prime(n); int f1 = rand.nextInt(); if (f1 < 1 || f1 > 46340) { return ; } int f2 = rand.nextInt(); if (f1 < 1 || f1 > 46340) { return ; } if (result == 1 && mult(f1, f2) == n && f1 > 1 && f2 > 1) { assert false; } else { return ; } } }