Length of largest subarray whose all elements are Perfect Number
Last Updated :
07 Aug, 2022
Given an array arr[] of integer elements, the task is to find the length of the largest sub-array of arr[] such that all the elements of the sub-array are Perfect number.
A perfect number is a positive integer that is equal to the sum of its proper divisors.
Examples:
Input: arr[] = {1, 7, 36, 4, 6, 28, 4}
Output: 2
Explanation:
Maximum length sub-array with all elements as perfect number is {6, 28}.
Input: arr[] = {25, 100, 2, 3, 9, 1}
Output: 0
Explanation:
None of the number is a perfect number
Approach:
- Traverse the array from left to right and initialize a max_length and current_length variable with 0.
- If the current element is a perfect number then increment current_length variable and continuethe process. Otherwise, set current_length to 0.
- At each step, assign max_length as max_length = max(current_length, max_length).
- Print the value of max_length in the end as it will store the required result.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPerfect( long long int n)
{
long long int sum = 1;
for ( long long int i = 2; i * i <= n; i++) {
if (n % i == 0) {
if (i * i != n)
sum = sum + i + n / i;
else
sum = sum + i;
}
}
if (sum == n && n != 1)
return true ;
return false ;
}
int contiguousPerfectNumber( int arr[], int n)
{
int current_length = 0;
int max_length = 0;
for ( int i = 0; i < n; i++) {
if (isPerfect(arr[i]))
current_length++;
else
current_length = 0;
max_length = max(max_length,
current_length);
}
return max_length;
}
int main()
{
int arr[] = { 1, 7, 36, 4, 6, 28, 4 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << contiguousPerfectNumber(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static boolean isPerfect( int n)
{
int sum = 1 ;
int i;
for ( i = 2 ; i * i <= n; i++) {
if (n % i == 0 ) {
if (i * i != n)
sum = sum + i + n / i;
else
sum = sum + i;
}
}
if (sum == n && n != 1 )
return true ;
return false ;
}
static int contiguousPerfectNumber( int arr[], int n)
{
int current_length = 0 ;
int max_length = 0 ;
int i;
for (i = 0 ; i < n; i++) {
if (isPerfect(arr[i]))
current_length++;
else
current_length = 0 ;
max_length = Math.max(max_length,
current_length);
}
return max_length;
}
public static void main(String []args)
{
int arr[] = { 1 , 7 , 36 , 4 , 6 , 28 , 4 };
int n = arr.length;
System.out.print(contiguousPerfectNumber(arr, n));
}
}
|
Python3
def isPerfect( n ):
sum = 1
i = 2
while i * i < = n:
if n % i = = 0 :
sum = sum + i + n / i
i + = 1
return ( True if sum = = n and n ! = 1 else False )
def contiguousPerfectNumber(arr, n):
current_length = 0
max_length = 0
for i in range ( 0 , n, 1 ):
if (isPerfect(arr[i])):
current_length + = 1
else :
current_length = 0
max_length = max (max_length,
current_length)
return max_length
if __name__ = = '__main__' :
arr = [ 1 , 7 , 36 , 4 , 6 , 28 , 4 ]
n = len (arr)
print (contiguousPerfectNumber(arr, n))
|
C#
using System;
class GFG{
static bool isPerfect( int n)
{
int sum = 1;
int i;
for (i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
if (i * i != n)
sum = sum + i + n / i;
else
sum = sum + i;
}
}
if (sum == n && n != 1)
{
return true ;
}
return false ;
}
static int contiguousPerfectNumber( int []arr,
int n)
{
int current_length = 0;
int max_length = 0;
int i;
for (i = 0; i < n; i++)
{
if (isPerfect(arr[i]))
{
current_length++;
}
else
{
current_length = 0;
}
max_length = Math.Max(max_length,
current_length);
}
return max_length;
}
public static void Main(String []args)
{
int []arr = { 1, 7, 36, 4, 6, 28, 4 };
int n = arr.Length;
Console.Write(contiguousPerfectNumber(arr, n));
}
}
|
Javascript
<script>
function isPerfect(n)
{
let sum = 1;
let i;
for ( i = 2; i * i <= n; i++) {
if (n % i == 0) {
if (i * i != n)
sum = sum + i + n / i;
else
sum = sum + i;
}
}
if (sum == n && n != 1)
return true ;
return false ;
}
function contiguousPerfectNumber(arr, n)
{
let current_length = 0;
let max_length = 0;
let i;
for (i = 0; i < n; i++) {
if (isPerfect(arr[i]))
current_length++;
else
current_length = 0;
max_length = Math.max(max_length,
current_length);
}
return max_length;
}
let arr = [ 1, 7, 36, 4, 6, 28, 4 ];
let n = arr.length;
document.write(contiguousPerfectNumber(arr, n));
</script>
|
Time Complexity: O(N×?N)
Auxiliary Space Complexity: O(1), since no extra space has been taken.
Share your thoughts in the comments
Please Login to comment...