Check if all array elements can be made divisible by K by replacing array elements with sum of pairs
Last Updated :
21 Apr, 2021
Given an array arr[] of size N and a positive integer K, the task is to make every element of the array divisible by K by repeatedly selecting a pair of indices (i, j) and perform arr[i] = arr[i] + arr[j].
Examples:
Input: arr[] = {3, 6, 3}, K = 6
Output: True
Explanation:
Update arr[0] = arr[0] + arr[0].
Update arr[2] = arr[2] + arr[2]
Input: arr[] = {6, 6, 8, 7, 3}, K = 6
Output: False
Approach: Follow the steps below to solve the problem:
- Traverse the array arr[]:
- Check if arr[i] is divisible by K or not:
- Initialize a variable, say temp, to store the value of arr[i] after each iteration.
- Repeatedly Multiply arr[i] by 2 until arr[i] < K * temp.
- Check if arr[i] % K != 0. If found to be true, print False and return.
- After completing the above steps, print True as all the elements are now divisible by K.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool makeArrayDivisibleByKUtil(
int arr[], int N, int K)
{
for ( int i = 0; i < N; i++) {
if (arr[i] % K != 0) {
int temp = arr[i];
while (arr[i] < K * temp) {
arr[i] = arr[i] * 2;
}
if (arr[i] % K != 0) {
return false ;
}
}
}
return true ;
}
void makeArrayDivisibleByK(
int arr[], int N, int K)
{
if (makeArrayDivisibleByKUtil(arr, N, K)) {
cout << "True" << endl;
}
else {
cout << "False" << endl;
}
}
int main()
{
int arr[] = { 3, 6, 3 };
int N = sizeof (arr) / sizeof (arr[0]);
int K = 6;
makeArrayDivisibleByK(arr, N, K);
return 0;
}
|
C
#include<stdio.h>
int makeArrayDivisibleByKUtil(
int arr[], int N, int K)
{
for ( int i = 0; i < N; i++)
{
if (arr[i] % K != 0)
{
int temp = arr[i];
while (arr[i] < K * temp)
{
arr[i] = arr[i] * 2;
}
if (arr[i] % K != 0)
{
return 0;
}
}
}
return 1;
}
void makeArrayDivisibleByK(
int arr[], int N, int K)
{
if (makeArrayDivisibleByKUtil(arr, N, K))
{
printf ( "True\n" );
}
else
{
printf ( "False\n" );
}
}
int main()
{
int arr[] = { 3,6,3 };
int N = sizeof (arr) / sizeof (arr[0]);
int K = 6;
makeArrayDivisibleByK(arr, N, K);
return 0;
}
|
Java
import java.io.*;
class GFG
{
public static boolean makeArrayDivisibleBykUtil( int arr[],
int n, int k)
{
for ( int i = 0 ; i < n; i++)
{
if (arr[i] % k != 0 )
{
int temp = arr[i];
while (arr[i] < k * arr[i])
{
arr[i] = arr[i] * 2 ;
}
if (arr[i] % k != 0 )
{
return false ;
}
}
}
return true ;
}
public static void makeArrayDivisibleByk( int arr[],
int n, int k)
{
if (makeArrayDivisibleBykUtil(arr, n, k))
{
System.out.println( "True" );
}
else
{
System.out.println( "False" );
}
}
public static void main(String[] args)
{
int [] arr = { 3 , 6 , 3 };
int n = 3 ;
int k = 6 ;
makeArrayDivisibleByk(arr, n, k);
}
}
|
Python3
def makeArrayDivisibleByKUtil(arr, N, K):
for i in range (N):
if (arr[i] % K ! = 0 ):
temp = arr[i]
while (arr[i] < K * temp):
arr[i] = arr[i] * 2
if (arr[i] % K ! = 0 ):
return False
return True
def makeArrayDivisibleByK(arr, N, K):
if (makeArrayDivisibleByKUtil(arr, N, K)):
print ( "True" )
else :
print ( "False" )
if __name__ = = '__main__' :
arr = [ 3 , 6 , 3 ]
N = len (arr)
K = 6
makeArrayDivisibleByK(arr, N, K)
|
C#
using System;
class GFG
{
public static bool makeArrayDivisibleBykUtil( int [] arr,
int n, int k)
{
for ( int i = 0; i < n; i++)
{
if (arr[i] % k != 0)
{
while (arr[i] < k * arr[i])
{
arr[i] = arr[i] * 2;
}
if (arr[i] % k != 0)
{
return false ;
}
}
}
return true ;
}
public static void makeArrayDivisibleByk( int []arr,
int n, int k)
{
if (makeArrayDivisibleBykUtil(arr, n, k))
{
Console.WriteLine( "True" );
}
else
{
Console.WriteLine( "False" );
}
}
public static void Main( string [] args)
{
int [] arr = { 3 , 6 , 3};
int n = 3;
int k = 6;
makeArrayDivisibleByk(arr, n, k);
}
}
|
Javascript
<script>
function makeArrayDivisibleByKUtil(arr, N, K)
{
for (let i = 0; i < N; i++)
{
if (arr[i] % K != 0)
{
let temp = arr[i];
while (arr[i] < K * temp)
{
arr[i] = arr[i] * 2;
}
if (arr[i] % K != 0)
{
return false ;
}
}
}
return true ;
}
function makeArrayDivisibleByK(arr, N, K)
{
if (makeArrayDivisibleByKUtil(arr, N, K))
{
document.write( "True<br>" );
}
else
{
document.write( "False<br>" );
}
}
let arr = [ 3, 6, 3 ];
let N = arr.length;
let K = 6;
makeArrayDivisibleByK(arr, N, K);
</script>
|
Time Complexity: O(N * logN)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...