Length of Longest Perfect number Subsequence in an Array
Given an array arr[] containing non-negative integers of length N, the task is to print the length of the longest subsequence of the Perfect number in the array.
A number is a perfect number if it is equal to the sum of its proper divisors, that is, the sum of its positive divisors excluding the number itself.
Examples:
Input: arr[] = { 3, 6, 11, 2, 28, 21, 8128 }
Output: 3
Explanation:
The longest perfect number subsequence is {6, 28, 8128} and hence the answer is 3.
Input:arr[] = { 6, 4, 10, 13, 9, 25 }
Output: 1
Explanation:
The longest perfect number subsequence is {6} and hence the answer is 1.
Approach:
To solve the problem mentioned above, follow the steps given below:
- Traverse the given array and for each element in the array, check if it is a perfect number or not.
- If the element is a perfect number, it will be in the Longest Perfect number Subsequence. Hence, increment the required length of the Longest Perfect number Subsequence by 1
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 longestPerfectSubsequence( int arr[], int n)
{
int answer = 0;
for ( int i = 0; i < n; i++) {
if (isPerfect(arr[i]))
answer++;
}
return answer;
}
int main()
{
int arr[] = { 3, 6, 11, 2, 28, 21, 8128 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << longestPerfectSubsequence(arr, n) << endl;
return 0;
}
|
Java
class GFG {
static boolean isPerfect( long n)
{
long sum = 1 ;
for ( long 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 longestPerfectSubsequence( int arr[],
int n)
{
int answer = 0 ;
for ( int i = 0 ; i < n; i++)
{
if (isPerfect(arr[i]) == true )
answer++;
}
return answer;
}
public static void main (String[] args)
{
int arr[] = { 3 , 6 , 11 , 2 , 28 , 21 , 8128 };
int n = arr.length;
System.out.println(longestPerfectSubsequence(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 longestPerfectSubsequence( arr, n):
answer = 0
for i in range (n):
if (isPerfect(arr[i])):
answer + = 1
return answer
if __name__ = = "__main__" :
arr = [ 3 , 6 , 11 , 2 , 28 , 21 , 8128 ]
n = len (arr)
print (longestPerfectSubsequence(arr, n))
|
C#
using System;
class GFG {
static bool isPerfect( long n)
{
long sum = 1;
for ( long 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 longestPerfectSubsequence( int []arr,
int n)
{
int answer = 0;
for ( int i = 0; i < n; i++)
{
if (isPerfect(arr[i]) == true )
answer++;
}
return answer;
}
public static void Main ( string [] args)
{
int []arr = { 3, 6, 11, 2, 28, 21, 8128 };
int n = arr.Length;
Console.WriteLine(longestPerfectSubsequence(arr, n));
}
}
|
Javascript
<script>
function isPerfect(n)
{
var sum = 1;
for ( var 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 longestPerfectSubsequence(arr, n)
{
var answer = 0;
for ( var i = 0; i < n; i++) {
if (isPerfect(arr[i]))
answer++;
}
return answer;
}
var arr = [3, 6, 11, 2, 28, 21, 8128];
var n = arr.length;
document.write( longestPerfectSubsequence(arr, n));
</script>
|
Time Complexity: O(N×?N)
Auxiliary Space Complexity: O(1)
Last Updated :
03 Jun, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...