Generate a unique Array of length N with sum of all subarrays divisible by N
Last Updated :
16 Aug, 2021
Given an integer N, the task is to make an array of unique elements of length N such that all subarrays sum modulo N equals to zero.
Examples:
Input: N = 6
Output: 6 12 18 24 30 36
Explanation:
Since all elements are a multiple of 6. Hence all subarrays add up to a sum divisible by 6.
Input: N = 4
Output: 4 8 12 16
Approach:
We can observe that for all subarrays to be divisible by N, the elements of the array need to be a multiple of N.
Illustration:
For N = 4, if we consider the array elements to {4, 8, 12, 16}, All possible subarrays are:
{4}, {8}, {12}, {16}, {4, 8}, {8, 12}, {12, 16}, {4, 8, 12}, {8, 12, 16}, {4, 8, 12, 16}
Hence, all subarrays have a sum divisible by N.
Hence, to solve the problem, we just need to print {N, 2*N, 3*N, ….., N*N} to get the desired array.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void makeArray( int a[], int n)
{
for ( int i = 1; i <= n; i++)
cout << i * n << " " ;
}
int main()
{
int N = 6;
int arr[N];
makeArray(arr, N);
}
|
Java
class GFG{
static void makeArray( int a[], int n)
{
for ( int i = 1 ; i <= n; i++)
System.out.print(i * n + " " );
}
public static void main(String[] args)
{
int N = 6 ;
int arr[] = new int [N];
makeArray(arr, N);
}
}
|
Python3
def makeArray(n):
for i in range (n):
print ((i + 1 ) * n, end = " " )
n = 6 ;
makeArray(n);
|
C#
using System;
class GFG{
static void makeArray( int []a, int n)
{
for ( int i = 1; i <= n; i++)
Console.Write(i * n + " " );
}
public static void Main()
{
int N = 6;
int []arr = new int [N];
makeArray(arr, N);
}
}
|
Javascript
<script>
function makeArray(n)
{
for ( var i = 1; i <= n; i++)
document.write(i * n + " " );
}
var N = 6;
makeArray(N);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...