How to resolve the algorithm Parallel calculations step by step in the Java programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Parallel calculations step by step in the Java programming language

Table of Contents

Problem Statement

Many programming languages allow you to specify computations to be run in parallel. While Concurrent computing is focused on concurrency, the purpose of this task is to distribute time-consuming calculations on as many CPUs as possible. Assume we have a collection of numbers, and want to find the one with the largest minimal prime factor (that is, the one that contains relatively large factors). To speed up the search, the factorization should be done in parallel using separate threads or processes, to take advantage of multi-core CPUs. Show how this can be formulated in your language. Parallelize the factorization of those numbers, then search the returned list of numbers and factors for the largest minimal factor, and return that number and its prime factors. For the prime number decomposition you may use the solution of the Prime decomposition task.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Parallel calculations step by step in the Java programming language

The provided Java code defines an interface named ParallelCalculations that demonstrates parallel processing techniques to find the number with the largest minimum prime factor. Here's a detailed breakdown:

1. Constants and Fields:

  • NUMBERS: A static, final array of long integers containing the numbers for which we'll calculate the minimum prime factors.

2. Main Method:

  • The main method is the entry point of the program.
  • It creates a sequential stream from the NUMBERS array using stream(NUMBERS) and applies several operations:
    • unordered(): Allows elements to be processed in any order (parallel operations can benefit from this).
    • parallel(): Executes the following operations in parallel, taking advantage of multiple cores/threads.
    • mapToObj(ParallelCalculations::minimalPrimeFactor): Maps each long in the stream to a long array representing the number and its minimum prime factor.
    • max(comparing(a -> a[0])): Finds the maximum element in the stream based on the first element of each long array (minimum prime factor).
  • It prints the number with the largest minimum prime factor if one is found.

3. minimalPrimeFactor Method:

  • This method takes a long integer n as input and calculates its minimum prime factor:
    • It iterates through all numbers from 2 to the square root of n (since larger factors would have already been found).
    • If n is divisible by i, it means i is a factor of n. In this case, it returns i as the minimum prime factor and n as the number.
    • If no factors are found in the range, it means n is a prime number. In this case, it returns n as both the minimum prime factor and the number.

Usage and Output:

  • The program executes in parallel to efficiently find the number with the largest minimum prime factor. In this case, based on the NUMBERS array provided in the code, the output would be:
12757923 has the largest minimum prime factor: 12757923

Source code in the java programming language

import static java.lang.System.out; 
import static java.util.Arrays.stream;
import static java.util.Comparator.comparing;
 
public interface ParallelCalculations {
    public static final long[] NUMBERS = {
      12757923,
      12878611,
      12878893,
      12757923,
      15808973,
      15780709,
      197622519
    };
 
    public static void main(String... arguments) {
      stream(NUMBERS)
        .unordered()
        .parallel()
        .mapToObj(ParallelCalculations::minimalPrimeFactor)
        .max(comparing(a -> a[0]))
        .ifPresent(res -> out.printf(
          "%d has the largest minimum prime factor: %d%n",
          res[1],
          res[0]
        ));
    }
 
    public static long[] minimalPrimeFactor(long n) {
      for (long i = 2; n >= i * i; i++) {
        if (n % i == 0) {
          return new long[]{i, n};
        }
      }
      return new long[]{n, n};
    }
}


  

You may also check:How to resolve the algorithm Word frequency step by step in the Objeck programming language
You may also check:How to resolve the algorithm Terminal control/Display an extended character step by step in the FreeBASIC programming language
You may also check:How to resolve the algorithm Secure temporary file step by step in the C# programming language
You may also check:How to resolve the algorithm RSA code step by step in the Ada programming language
You may also check:How to resolve the algorithm Angles (geometric), normalization and conversion step by step in the C programming language