For example, lets say I want to process 16,000,000 transactions with about 300 threads. I can run the following Java class, and figure out that if I use 320 threads, I need 50,000 loops.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.*; | |
/** Find all the even divisors of a number. */ | |
class LargestModulus | |
{ | |
/** | |
* Find all the divisors for a number (a.k.a., a dividend). The number must be a positive integer. It may be provided on the command line, or entered interactively when prompted. | |
* | |
* @param args if a command line parameter is detected, the first argument is used. | |
*/ | |
public static void main(final String[] args) | |
{ | |
int num = 0; | |
if (args.length == 0) | |
{ | |
final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); | |
System.out.print("Enter an integer: "); | |
try | |
{ | |
num = Integer.parseInt(reader.readLine()); | |
} | |
catch (final IOException e) | |
{ | |
e.printStackTrace(); | |
} | |
} | |
else | |
{ | |
num = Integer.parseInt(args[0]); | |
} | |
findEvenDivisors(num); | |
} | |
/** | |
* Brute force method to find the even divisors for a number. | |
* | |
* @param dividend the number to find divisors for | |
*/ | |
public static void findEvenDivisors(final int dividend) | |
{ | |
if (dividend > 0) | |
{ | |
System.out.println("Even divisors for " + dividend); | |
for (int i = dividend / 2; i > 0; i--) | |
{ | |
final int modulus = dividend % i; | |
if (modulus == 0) | |
{ | |
System.out.println(i + " x " + dividend / i + " = " + dividend); | |
} | |
} | |
} | |
else | |
{ | |
System.out.println("ERROR: Number must be > 0"); | |
} | |
System.out.println("=== End ==="); | |
} | |
} |
Enter an integer: 16000000 Even divisors for 16000000 8000000 x 2 = 16000000 4000000 x 4 = 16000000 3200000 x 5 = 16000000 2000000 x 8 = 16000000 1600000 x 10 = 16000000 1000000 x 16 = 16000000 800000 x 20 = 16000000 640000 x 25 = 16000000 500000 x 32 = 16000000 400000 x 40 = 16000000 320000 x 50 = 16000000 250000 x 64 = 16000000 200000 x 80 = 16000000 160000 x 100 = 16000000 128000 x 125 = 16000000 125000 x 128 = 16000000 100000 x 160 = 16000000 80000 x 200 = 16000000 64000 x 250 = 16000000 62500 x 256 = 16000000 50000 x 320 = 16000000 40000 x 400 = 16000000 32000 x 500 = 16000000 31250 x 512 = 16000000 25600 x 625 = 16000000 25000 x 640 = 16000000 20000 x 800 = 16000000 16000 x 1000 = 16000000 15625 x 1024 = 16000000 12800 x 1250 = 16000000 12500 x 1280 = 16000000 10000 x 1600 = 16000000 8000 x 2000 = 16000000 6400 x 2500 = 16000000 6250 x 2560 = 16000000 5120 x 3125 = 16000000 5000 x 3200 = 16000000 4000 x 4000 = 16000000 3200 x 5000 = 16000000 3125 x 5120 = 16000000 2560 x 6250 = 16000000 2500 x 6400 = 16000000 2000 x 8000 = 16000000 1600 x 10000 = 16000000 1280 x 12500 = 16000000 1250 x 12800 = 16000000 1024 x 15625 = 16000000 1000 x 16000 = 16000000 800 x 20000 = 16000000 640 x 25000 = 16000000 625 x 25600 = 16000000 512 x 31250 = 16000000 500 x 32000 = 16000000 400 x 40000 = 16000000 320 x 50000 = 16000000 256 x 62500 = 16000000 250 x 64000 = 16000000 200 x 80000 = 16000000 160 x 100000 = 16000000 128 x 125000 = 16000000 125 x 128000 = 16000000 100 x 160000 = 16000000 80 x 200000 = 16000000 64 x 250000 = 16000000 50 x 320000 = 16000000 40 x 400000 = 16000000 32 x 500000 = 16000000 25 x 640000 = 16000000 20 x 800000 = 16000000 16 x 1000000 = 16000000 10 x 1600000 = 16000000 8 x 2000000 = 16000000 5 x 3200000 = 16000000 4 x 4000000 = 16000000 2 x 8000000 = 16000000 1 x 16000000 = 16000000 === End ===
Essentially, this provides all the numbers that evenly divide the provided number. Or, in other words, find multipliers that will result in a desired product.
No comments:
Post a Comment