- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Check for an array element that is coprime with all others in C++
Suppose we have an array A[] of positive integers, where 2 <= A[i] <= 106. For all possible values of i. The task is to check whether, there exists at least on element in the array, that forms coprime pair with all other elements of the array. Consider the array {2, 8, 4, 10, 6, 7}. Here 7 is coprime with all other elements in the array.
An efficient approach to solve this problem is that, we have to generate all the prime factors of integers in the given array, if the element does not contain any common prime factor with other elements, it always forms coprime pair with other elements.
Example
#include <iostream> #define MAX 1000001 using namespace std; int smallPrimeFactor[MAX]; // Hash to store prime factors count int hash1[MAX] = { 0 }; void getSmallestPrimeFactor() { smallPrimeFactor[1] = 1; for (int i = 2; i < MAX; i++) smallPrimeFactor[i] = i; for (int i = 4; i < MAX; i += 2) smallPrimeFactor[i] = 2; for (int i = 3; i * i < MAX; i++) { if (smallPrimeFactor[i] == i) { for (int j = i * i; j < MAX; j += i) if (smallPrimeFactor[j] == j) smallPrimeFactor[j] = i; } } } void factorizationResult(int x) { int temp; while (x != 1) { temp = smallPrimeFactor[x]; if (x % temp == 0) { hash1[smallPrimeFactor[x]]++; x = x / smallPrimeFactor[x]; } while (x % temp == 0) x = x / temp; } } bool hasCommonFactors(int x) { int temp; while (x != 1) { temp = smallPrimeFactor[x]; if (x % temp == 0 && hash1[temp] > 1) return false; while (x % temp == 0) x = x / temp; } return true; } bool hasValueToFormCoPrime(int arr[], int n) { getSmallestPrimeFactor(); for (int i = 0; i < n; i++) factorizationResult(arr[i]); for (int i = 0; i < n; i++) if (hasCommonFactors(arr[i])) return true; return false; } int main() { int arr[] = { 2, 8, 4, 10, 6, 7 }; int n = sizeof(arr) / sizeof(arr[0]); if (hasValueToFormCoPrime(arr, n)) cout << "There is a value, that can form Co-prime pairs with all other elements"; else cout << "There is no value, that can form Co-prime pairs with all other elements"; }
Output
There is a value, that can form Co-prime pairs with all other elements
Advertisements