/* Computes prime numbers within a given range. Adapted from pthreads program published at http://docs.sun.com/app/docs/doc/820-0619/6ncbk8g6q?a=view */ public class PrimeBuggy implements Runnable { private static int start, N; private static int numThreads; private static int primes[]; private static boolean pflag[]; private static int total = 0; private static boolean is_prime(int v) { int i; int bound = (int)Math.floor(Math.sqrt((double)v)) + 1; for (i = 2; i < bound; i++) { if (pflag[i]) continue; if (v % i == 0) { pflag[v] = true; return false; } } return (v > 1); } /***/ private int threadNum; private PrimeBuggy(int threadNum) { this.threadNum = threadNum; } public void run() { int i; start = N/numThreads * threadNum; N = start + N/numThreads; for (i = start; i < N; i++) { if (is_prime(i)) { primes[total] = i; total++; } } } public static void main(String args[]) throws InterruptedException { if (args.length != 2) { System.out.println("Args: numPrimes numThreads"); System.exit(1); } N = new Integer(args[0]).intValue(); primes = new int[N]; pflag = new boolean[N]; numThreads = new Integer(args[1]).intValue(); Thread[] threads = new Thread[numThreads-1]; for (int i = 0; i