
#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