• + 2 comments

    EDIT - 1:

    I've updated my code for better readability: I guees this will explain it a lot better.

    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;
    
    public class Solution {
        
        private boolean canADivideI(int i, int[] a, int n){
            boolean answer = false;
            for(int j=0;j<n;j++){
                    if(i%a[j] == 0){
                        if(j==n-1){
                            answer = true;
                        }
                    }
                    else{j=n;}
            }
            return answer;
        }
        
        private boolean canIDivideB(int i, int[] b, int m){
            boolean answer = false;
            for(int k=0;k<m;k++){
                if(b[k]%i ==0){
                    if(k==m-1){
                        answer = true;
                    }
                }
                else {k=m;}
            }   
            return answer;
        }
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            Solution s = new Solution();
            int n = in.nextInt();
            int m = in.nextInt();
            int[] a = new int[n];
            int max = 100, min = 0, elementsFound = 0;
            for(int a_i=0; a_i < n; a_i++){
                a[a_i] = in.nextInt();
                //Look for Max in A and set that as the MIN 
                if(min < a[a_i]) {min = a[a_i];}
            }
            int[] b = new int[m];
            for(int b_i=0; b_i < m; b_i++){
                b[b_i] = in.nextInt();
                //Look for Min in B and set that as the MAX
                if(max > b[b_i]) {max = b[b_i];}
            }
            for(int i = min; i <=max; i++){
                if(s.canADivideI(i, a, n) && s.canIDivideB(i, b, m)){
                    elementsFound++;   
                }
            }
            System.out.println(elementsFound);
        }
    }
    

    I did something simmilar, I guess it is an optimized version.

    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;
    
    public class Solution {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            int n = in.nextInt();
            int m = in.nextInt();
            int[] a = new int[n];
            int max = 100, min = 0, answr = 0;
            for(int a_i=0; a_i < n; a_i++){
                a[a_i] = in.nextInt();
                //Look for Max in A and set that as the MIN 
                if(min < a[a_i]) {min = a[a_i];}
            }
            int[] b = new int[m];
            for(int b_i=0; b_i < m; b_i++){
                b[b_i] = in.nextInt();
                //Look for Min in B and set that as the MAX
                if(max > b[b_i]) {max = b[b_i];}
            }
            for(int i = min; i <= max; i++){
                for(int j = 0; j < n; j++){
                    if(i%a[j] == 0){
                        if(j == n-1){
                            for(int k = 0; k < m; k++){
                                if(b[k]%i == 0){
                                    if(k == m-1){
                                        answr++;
                                    }
                                }
                                else {k = m;}
                            }
                        }
                    }
                    else{j = n;}
                }
            }
            System.out.println(answr);
        }
    }