
  
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000000
  
void countOfPrimefactors(vector<int>& CountDistinct)
{
    bool prime[MAX + 1];
  
    for (int i = 0; i <= MAX; i++) {
        CountDistinct[i] = 0;
        prime[i] = true;
    }
  
    
    for (long long int i = 2; i <= MAX; i++) {
  
        if (prime[i] == true) {
            CountDistinct[i] = 1;
  
            for (long long int j = i * 2; j <= MAX;
                 j += i) {
  
                CountDistinct[j]++;
                prime[j] = false;
            }
        }
    }
}
  
int CountEvenPair(int A[], int B[], int N, int M)
{
    
    
    vector<int> countDistinct(MAX + 1);
  
    countOfPrimefactors(countDistinct);
  
    
    
    int evenCount = 0;
  
    
    
    int oddCount = 0;
  
    
    int evenPairs = 0;
  
    
    for (int i = 0; i < M; i++) {
  
        
        
  
        if (countDistinct[B[i]] == 0)
            continue;
  
        
        if (countDistinct[B[i]] & 1) {
  
            
            oddCount++;
        }
        else {
  
            
            evenCount++;
        }
    }
  
    for (int i = 0; i < N; i++) {
  
        
        
  
        if (countDistinct[A[i]] == 0)
            continue;
  
        
        if (countDistinct[A[i]] & 1) {
  
            
            evenPairs += (evenCount);
        }
  
        
        else {
  
            
            
            evenPairs += evenCount + oddCount;
        }
    }
  
    return evenPairs;
}
  
int main()
{
    int A[] = { 1, 2, 3 };
    int B[] = { 4, 5, 6 };
  
    int N = sizeof(A) / sizeof(A[0]);
    int M = sizeof(B) / sizeof(B[0]);
  
    cout << CountEvenPair(A, B, N, M);
  
    return 0;
}
 
 
 
 
0 comments:
Post a Comment