Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private List<Integer> getAExcludingPrimeOccurencesInB(ArrayList<Integer> arrayA, ArrayList<Integer> arrayB) {
- List<Integer> result = new ArrayList<>();
- //get max value from array B
- int maxValue = Integer.MIN_VALUE;
- for(Integer val: arrayB) {
- if(val > maxValue) {
- maxValue = val;
- }
- }
- //count occurences in array B
- int [] occurences = new int[maxValue + 1];
- for(Integer val: arrayB) {
- occurences[val] += 1;
- }
- // 0 - not checked, 1 - prime, -1 - not prime
- int [] primeChecked = new int[maxValue + 1];
- //fill result array
- Iterator<Integer> iteratorA = arrayA.iterator();
- int value, occurence;
- while(iteratorA.hasNext()) {
- value = iteratorA.next();
- if(primeChecked[value] == 0) { //check if number of occurences is prime
- occurence = occurences[value];
- if(occurence <= 1) { //not prime
- primeChecked[value] = -1;
- result.add(value);
- } else if(occurence == 2) { //prime
- primeChecked[value] = 1;
- } else if(occurence % 2 == 0) { //not prime
- primeChecked[value] = -1;
- result.add(value);
- } else {
- primeChecked[value] = 1;
- for(int i = 3; i*i < occurence; i += 2) {
- if (occurence % i == 0) { //not prime
- primeChecked[value] = -1;
- result.add(value);
- break;
- }
- }
- }
- } else if(primeChecked[value] == -1) { //number of occurences is not prime
- result.add(value);
- }
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement