Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • Natural Numbers
  • Whole Numbers
  • Real Numbers
  • Integers
  • Rational Numbers
  • Irrational Numbers
  • Complex Numbers
  • Prime Numbers
  • Odd Numbers
  • Even Numbers
  • Properties of Numbers
  • Number System
Open In App
Next Article:
Represent N as the sum of exactly K powers of two | Set 3
Next article icon

Nth Subset of the Sequence consisting of powers of K in increasing order of their Sum

Last Updated : 20 Oct, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two integers N and K, the task is to find the Nth Subset from the sequence of subsets generated from the powers of K i.e. {1, K1, K2, K3, …..} such that the subsets are arranged in increasing order of their sum, the task is to find the Nth subset from the sequence.

Examples:

Input: N = 5, K = 3 
Output: 1 9 
Explanation: 
The sequence of subsets along with their sum are:

  • Subset = {1}, Sum = 1
  • Subset = {3}, Sum = 3
  • Subset = {1, 3}, Sum = 4
  • Subset = {9}, Sum = 9
  • Subset = {1, 9}, Sum = 10

Therefore, the subset at position 5 is {1, 9}.

Input: N = 4, K = 4 
Output: 16

Approach: 
Let’s refer to the required sequence for K = 3 given below:

From the above sequence, it can be observed that the subset {3} has position 2, the subset {9} has position 4, and the subset {27} has position 8, and so on. The subset {1, 3}, {1, 9}, {1, 27} occupies positions 3, 5, and 9 respectively. Hence, all the elements of the required Nth subset can be obtained by finding the nearest power of 2 which is smaller than or equal to N.

Illustration: 
N = 6, K = 3
1st iteration:

  1. p = log2(6) = 2
  2. 32 = 9, Subset = {9}
  3. N = 6 % 4 = 2

2nd iteration:

  1. p = log2(2) = 1
  2. 31 = 3, Subset = {3, 9}
  3. N = 2 % 2 = 0

Therefore, the required subset is {3, 9}

Follow the steps below to solve the problem:

  • Calculate the nearest power of 2 which is smaller than or equal to N, say p. Therefore, p = log2N.
  • Now, the element of the subset will be Kp. Insert it into the front of the subset.
  • Update N to N % 2p.
  • Repeat the above steps until N becomes 0, and consequently print the obtained subset.

Below is the implementation of the above approach:

C++




// C++ program for the above approach
#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;
#define lli long long int
 
// Function to print the
// required N-th subset
void printSubset(lli n, int k)
{
    vector<lli> answer;
    while(n > 0)
    {
 
        // Nearest power of 2<=N
        lli p = log2(n);
         
        // Now insert k^p in the answer
        answer.push_back(pow(k, p));
         
        // update n
        n %= (int)pow(2, p);
    }
 
    // Print the ans in sorted order
    reverse(answer.begin(), answer.end());
    for(auto x: answer)
    {
        cout << x << " ";
    }
}
 
// Driver Code
int main()
{
    lli n = 5;
    int k = 4;
    printSubset(n, k);
}
 
// This code is contributed by winter_soldier
 
 

Java




// Java program for above approach
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
 
  // Function to print the 
  // required N-th subset 
  static void printSubset(long n, int k)
  {
    ArrayList<Long> answer = new ArrayList<>();
    while(n > 0)
    {
 
      // Nearest power of 2<=N
      long p = (long)(Math.log(n) / Math.log(2));;
 
      // Now insert k^p in the answer
      answer.add((long)(Math.pow(k, p)));
 
      // update n
      n %= (int)Math.pow(2, p);
    }
 
    // Print the ans in sorted order
    Collections.sort(answer);
    for(Long x: answer)
    {
      System.out.print(x + " ");
    }
  }
 
  // Driver function
  public static void main (String[] args)
  {
    long n = 5;
    int k = 4;
    printSubset(n, k);
  }
}
 
// This code is contributed by offbeat
 
 

Python3




# Python3 program for
# the above approach
import math
 
# Function to print the
# required N-th subset
def printSubset(N, K):
    # Stores the subset
    answer = ""
    while(N > 0):
        # Nearest power of 2 <= N
        p = int(math.log(N, 2))
        # Insert K ^ p in the subset
        answer = str(K**p)+" "+answer
        # Update N
        N = N % (2**p)
         
    # Print the subset
    print(answer)
     
# Driver Code
N = 5
K = 4
printSubset(N, K)
 
 

C#




// C# program for the above approach
using System;
using System.Collections.Generic;
class GFG {
 
  // Function to print the
  // required N-th subset
  static void printSubset(int n, int k)
  {
    List<int> answer = new List<int>();
    while(n > 0)
    {
 
      // Nearest power of 2<=N
      int p = (int)Math.Log(n,2);
 
      // Now insert k^p in the answer
      answer.Add((int)Math.Pow(k, p));
 
      // update n
      n %= (int)Math.Pow(2, p);
    }
 
    // Print the ans in sorted order
    answer.Reverse();
    foreach(int x in answer)
    {
      Console.Write(x + " ");
    }
  }
 
  // Driver code
  static void Main() {
    int n = 5;
    int k = 4;
    printSubset(n, k);
  }
}
 
// This code is contributed by divyeshrabadiya07.
 
 

Javascript




<script>
// Javascript program for the above approach
 
// Function to print the
// required N-th subset
function printSubset(n, k)
{
    var answer = [];
    while(n > 0)
    {
 
        // Nearest power of 2<=N
        var p = parseInt(Math.log2(n));
         
        // Now insert k^p in the answer
        answer.push(Math.pow(k, p));
         
        // update n
        n %= parseInt(Math.pow(2, p));
    }
 
    // Print the ans in sorted order
    answer.sort();
    //reverse(answer.begin(), answer.end());
    for(var i=0;i<answer.length;i++)
    {
        document.write(answer[i] + " ");
    }
}
 
var n = 5;
var k = 4;
printSubset(n, k);
 
//This code is contributed by SoumikMondal
</script>
 
 
Output
1 16 

Time Complexity: O(logN) 
Auxiliary Space: O(logN) 

Approach: 

  • Initialize the count and x by 0. Also, a vector to store the elements of the subsets.
  • Do the following while n is greater than 0.
    • Set x = n & 1, for finding if the last bit of the number is set or not.
    • Now Push element 3count into the subset if n is not 0.
    • Reduce the number n by two with the help of right shifting by 1 unit.
    • Increase the count value by 1.
  • Finally, the elements in the array are the elements of the Nth subset.

Below is the implementation of the above approach:

C++




// C++ program to print subset
// at the nth position ordered
// by the sum of the elements
#include <bits/stdc++.h>
using namespace std;
 
// Function to print the elements of
// the subset at pos n
void printsubset(int n,int k)
{
    //  Initialize count=0 and x=0
    int count = 0, x = 0;
   
    // create a vector for
    // storing the elements
    // of subsets
    vector<int> vec;
   
    // doing until all the
    // set bits of n are used
    while (n) {
        x = n & 1;
       
        // this part is executed only
        // when the last bit is
        // set
        if (x) {
            vec.push_back(pow(k, count));
        }
       
        // right shift the bit by one position
        n = n >> 1;
       
        // increasing the count each time by one
        count++;
    }
   
    // printing the values os elements
    for (int i = 0; i < vec.size(); i++)
        cout << vec[i] << " ";
}
 
// Driver Code
int main()
{
    int n = 7,k=4;
    printsubset(n,k);
    return 0;
}
 
// This code is contributed by shivkant
 
 

Java




// Java program to print subset
// at the nth position ordered
// by the sum of the elements
import java.util.*;
import java.lang.*;
class GFG{
   
// Function to print the
// elements of the subset
// at pos n
static void printsubset(int n,
                        int k)
{
  // Initialize count=0 and x=0
  int count = 0, x = 0;
 
  // Create a vector for
  // storing the elements
  // of subsets
  ArrayList<Integer> vec =
            new ArrayList<>();
 
  // Doing until all the
  // set bits of n are used
  while (n != 0)
  {
    x = n & 1;
 
    // This part is executed only
    // when the last bit is
    // set
    if (x != 0)
    {
      vec.add((int)Math.pow(k,
                            count));
    }
 
    // Right shift the bit
    // by one position
    n = n >> 1;
 
    // Increasing the count
    // each time by one
    count++;
  }
 
  // Printing the values os elements
  for (int i = 0; i < vec.size(); i++)
    System.out.print(vec.get(i) + " ");
}
 
// Driver function
public static void main (String[] args)
{
  int n = 7, k = 4;
  printsubset(n, k);
}
}
 
// This code is contributed by offbeat
 
 

Python3




# Python3 program to print subset
# at the nth position ordered
# by the sum of the elements
import math
 
# Function to print the elements of
# the subset at pos n
def printsubset(n, k):
     
    # Initialize count=0 and x=0
    count = 0
    x = 0
 
    # Create a vector for
    # storing the elements
    # of subsets
    vec = []
 
    # Doing until all the
    # set bits of n are used
    while (n > 0):
        x = n & 1
         
        # This part is executed only
        # when the last bit is
        # set
        if (x):
            vec.append(pow(k, count))
     
        # Right shift the bit by one position
        n = n >> 1
     
        # Increasing the count each time by one
        count += 1
 
    # Printing the values os elements
    for item in vec:
        print(item, end = " ")
 
# Driver Code
n = 7
k = 4
 
printsubset(n, k)
 
# This code is contributed by Stream_Cipher
 
 

C#




// C# program to print subset
// at the nth position ordered
// by the sum of the elements
using System.Collections.Generic;
using System;
 
class GFG{
 
// Function to print the
// elements of the subset
// at pos n
static void printsubset(int n, int k)
{
     
    // Initialize count=0 and x=0
    int count = 0, x = 0;
     
    // Create a vector for
    // storing the elements
    // of subsets
    List<int> vec = new List<int>();
     
    // Doing until all the
    // set bits of n are used
    while (n != 0)
    {
        x = n & 1;
     
        // This part is executed only
        // when the last bit is
        // set
        if (x != 0)
        {
            vec.Add((int)Math.Pow(k, count));
        }
     
        // Right shift the bit
        // by one position
        n = n >> 1;
     
        // Increasing the count
        // each time by one
        count++;
    }
     
    // Printing the values os elements
    for(int i = 0; i < vec.Count; i++)
        Console.Write(vec[i] + " ");
}
 
// Driver code
public static void Main ()
{
    int n = 7, k = 4;
     
    printsubset(n, k);
}
}
 
// This code is contributed by Stream_Cipher
 
 

Javascript




<script>
    // Javascript program to print subset
    // at the nth position ordered
    // by the sum of the elements
     
    // Function to print the
    // elements of the subset
    // at pos n
    function printsubset(n, k)
    {
 
        // Initialize count=0 and x=0
        let count = 0, x = 0;
 
        // Create a vector for
        // storing the elements
        // of subsets
        let vec = [];
 
        // Doing until all the
        // set bits of n are used
        while (n != 0)
        {
            x = n & 1;
 
            // This part is executed only
            // when the last bit is
            // set
            if (x != 0)
            {
                vec.push(Math.pow(k, count));
            }
 
            // Right shift the bit
            // by one position
            n = n >> 1;
 
            // Increasing the count
            // each time by one
            count++;
        }
 
        // Printing the values os elements
        for(let i = 0; i < vec.length; i++)
            document.write(vec[i] + " ");
    }
     
    let n = 7, k = 4;
      
    printsubset(n, k);
 
</script>
 
 
Output
1 4 16 

Time Complexity: O(log2N) 
Auxiliary Space: O(log2N) 



Next Article
Represent N as the sum of exactly K powers of two | Set 3
author
poulami21ghosh
Improve
Article Tags :
  • DSA
  • Greedy
  • Mathematical
  • Pattern Searching
  • maths-power
  • Numbers
  • subset
Practice Tags :
  • Greedy
  • Mathematical
  • Numbers
  • Pattern Searching
  • subset

Similar Reads

  • Sum of maximum and minimum of Kth subset ordered by increasing subset sum
    Given an integer N and a set of all non-negative powers of N as S = {N0, N1, N2, N3, ... }, arrange all non-empty subsets of S in increasing order of subset-sum. The task is to find the sum of the greatest and smallest elements of the Kth subset from that ordering. Examples: Input: N = 4, K = 3Outpu
    7 min read
  • Print the sequence of size N in which every term is sum of previous K terms
    Given two integers N and K, the task is to generate a series of N terms in which every term is sum of the previous K terms.Note: The first term of the series is 1. if there are not enough previous terms, then other terms are supposed to be 0.Examples: Input: N = 8, K = 3 Output: 1 1 2 4 7 13 24 44 E
    11 min read
  • Represent n as the sum of exactly k powers of two | Set 2
    Given two integers n and k, the task is to find whether it is possible to represent n as the sum of exactly k powers of 2. If possible then print k positive integers such that they are powers of 2 and their sum is exactly equal to n else print Impossible. Examples: Input: n = 9, k = 4 Output: 1 2 2
    7 min read
  • Represent N as the sum of exactly K powers of two | Set 3
    Given two integers N and K, the task is to find whether it is possible to represent N as the sum of exactly K powers of 2. If possible, then print K positive integers such that they are powers of 2 and their sum is exactly equal to N. Otherwise, print "Impossible". If multiple answers exist, print a
    7 min read
  • Count number of increasing sub-sequences : O(NlogN)
    Given an array arr[] of length N, the task is to find the number of strictly increasing sub-sequences in the given array. Examples: Input: arr[] = {1, 2, 3} Output: 7 All increasing sub-sequences will be: 1) {1} 2) {2} 3) {3} 4) {1, 2} 5) {1, 3} 6) {2, 3} 7) {1, 2, 3} Thus, answer = 7Input: arr[] =
    12 min read
  • Find K that requires minimum increments or decrements of array elements to obtain a sequence of increasing powers of K
    Given an array consisting of N integers, the task is to find the integer K which requires the minimum number of moves to convert the given array to a sequence of powers of K, i.e. {K0, K1, K2, ......., KN - 1}. In each move, increase or decrease an array element by one. Examples: Input: arr[] = {1,
    7 min read
  • Count of distinct integers in range [1, N] that do not have any subset sum as K
    Given two positive integers N and K such that K?N, the task is to find the maximum number of distinct integers in the range [1, N] having no subset with a sum equal to K. If there are multiple solutions, print any. Examples: Input: N = 5, K = 3Output: 1 4 5Explanation: There are two sets of distinct
    6 min read
  • Sum of products of all possible K size subsets of the given array
    Given an array arr[] of N non-negative integers and an integer 1 ? K ? N. The task is to find the sum of the products of all possible subsets of arr[] of size K. Examples: Input: arr[] = {1, 2, 3, 4}, K = 2 Output: 35 (1 * 2) + (1 * 3) + (1 * 4) + (2 * 3) + (2 * 4) + (3 * 4) = 2 + 3 + 4 + 6 + 8 + 12
    15+ min read
  • Minimum number of insertions required such that first K natural numbers can be obtained as sum of a subsequence of the array
    Given an array arr[] consisting of N positive integers and a positive integer K, the task is to find the minimum number of elements that are required to be inserted such that all numbers from the range [1, K] can be obtained as the sum of any subsequence of the array. Examples: Input: arr[] = {1, 3,
    8 min read
  • Sum of subsets of all the subsets of an array | O(N)
    Given an array arr[] of length N, the task is to find the overall sum of subsets of all the subsets of the array.Examples: Input: arr[] = {1, 1} Output: 6 All possible subsets: a) {} : 0 All the possible subsets of this subset will be {}, Sum = 0 b) {1} : 1 All the possible subsets of this subset wi
    7 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences