Find n positive integers that satisfy the given equations

Given three integers N, X and Y. The task is to find N positive integers that satisfy the given equations.

  1. a12 + a22 + …. + an2 ≥ X
  2. a1 + a2 + …. + an ≤ Y

If no such sequence of integers is possible then print -1.

Examples:

Input: N = 3, X = 254, Y = 18
Output: 1 1 16
12 + 12 + 162 = 1 + 1 + 256 = 258 which is ≥ X
1 + 1 + 16 = 18 which is ≤ Y

Input: N = 2, X = 3, Y = 2
Output: -1
No such sequence exists.



Approach: It is easy to see that in order to maximize the sum of squares, one should make all numbers except the first one equal to 1 and maximize the first number. Keeping this in mind we only need to check whether the given value of y is large enough to satisfy a restriction that all n numbers are positive. If y is not too small, then all we need is to ensure that X ≤ 1 + 1 + … + (y – (n – 1))2.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to find n positive integers
// that satisfy the given conditions
void findIntegers(int n, int x, int y)
{
  
    // To store n positive integers
    vector<int> ans;
  
    // Place N - 1 one's
    for (int i = 0; i < n - 1; i++)
        ans.push_back(1);
  
    // If can not place (y - (n - 1))
    // as the Nth integer
    if (y - (n - 1) <= 0) {
        cout << "-1";
        return;
    }
  
    // Place Nth integer
    ans.push_back(y - (n - 1));
  
    // To store the sum of
    // squares of N integers
    int store = 0;
    for (int i = 0; i < n; i++)
        store += ans[i] * ans[i];
  
    // If it is less than x
    if (store < x) {
        cout << "-1";
        return;
    }
  
    // Print the required integers
    for (int i = 0; i < n; i++)
        cout << ans[i] << " ";
}
  
// Driver code
int main()
{
    int n = 3, x = 254, y = 18;
    findIntegers(n, x, y);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG
{
      
// Function to find n positive integers
// that satisfy the given conditions
static void findIntegers(int n, int x, int y)
{
  
    // To store n positive integers
    ArrayList<Integer> ans = new ArrayList<Integer>();
  
    // Place N - 1 one's
    for (int i = 0; i < n - 1; i++)
        ans.add(1);
  
    // If can not place (y - (n - 1))
    // as the Nth integer
    if (y - (n - 1) <= 0)
    {
        System.out.print("-1");
        return;
    }
  
    // Place Nth integer
    ans.add(y - (n - 1));
  
    // To store the sum of
    // squares of N integers
    int store = 0;
    for (int i = 0; i < n; i++)
        store += ans.get(i) * ans.get(i);
  
    // If it is less than x
    if (store < x) 
    {
        System.out.print("-1");
        return;
    }
  
    // Print the required integers
    for (int i = 0; i < n; i++)
        System.out.print(ans.get(i)+" ");
}
  
// Driver code
public static void main (String[] args) 
{
    int n = 3, x = 254, y = 18;
    findIntegers(n, x, y);
}
}
  
// This code is contributed by mits

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function to find n positive integers
# that satisfy the given conditions
def findIntegers(n, x, y):
  
    # To store n positive integers
    ans = []
  
    # Place N - 1 one's
    for i in range(n - 1):
        ans.append(1)
  
    # If can not place (y - (n - 1))
    # as the Nth integer
    if (y - (n - 1) <= 0):
        print("-1", end = "")
        return
  
    # Place Nth integer
    ans.append(y - (n - 1))
  
    # To store the sum of
    # squares of N integers
    store = 0
  
    for i in range(n):
        store += ans[i] * ans[i]
  
    # If it is less than x
    if (store < x):
        print("-1", end = "")
        return;
  
    # Print the required integers
    for i in range(n):
        print(ans[i], end = " ")
  
# Driver code
n, x, y = 3, 254, 18
findIntegers(n, x, y)
  
# This code is contributed by mohit kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
using System.Collections;
  
class GFG
{
      
// Function to find n positive integers
// that satisfy the given conditions
static void findIntegers(int n, int x, int y)
{
  
    // To store n positive integers
    ArrayList ans = new ArrayList();
  
    // Place N - 1 one's
    for (int i = 0; i < n - 1; i++)
        ans.Add(1);
  
    // If can not place (y - (n - 1))
    // as the Nth integer
    if (y - (n - 1) <= 0)
    {
        Console.Write("-1");
        return;
    }
  
    // Place Nth integer
    ans.Add(y - (n - 1));
  
    // To store the sum of
    // squares of N integers
    int store = 0;
    for (int i = 0; i < n; i++)
        store += (int)ans[i] *(int)ans[i];
  
    // If it is less than x
    if (store < x) 
    {
        Console.Write("-1");
        return;
    }
  
    // Print the required integers
    for (int i = 0; i < n; i++)
        Console.Write((int)ans[i]+" ");
}
  
// Driver code
static void Main() 
{
    int n = 3, x = 254, y = 18;
    findIntegers(n, x, y);
}
}
  
// This code is contributed by mits

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// Php implementation of the approach 
  
// Function to find n positive integers 
// that satisfy the given conditions 
function findIntegers($n, $x, $y
{
  
    // To store n positive integers 
    $ans = array(); 
  
    // Place N - 1 one's 
    for ($i = 0; $i < $n - 1; $i++) 
        array_push($ans,1) ; 
  
    // If can not place (y - (n - 1)) 
    // as the Nth integer 
    if ($y - ($n - 1) <= 0) 
    
        echo "-1"
        return
    
  
    // Place Nth integer 
    array_push($ans,$y - ($n - 1)); 
  
    // To store the sum of 
    // squares of N integers 
    $store = 0; 
    for ($i = 0; $i < $n; $i++) 
        $store += $ans[$i] * $ans[$i]; 
  
    // If it is less than x 
    if ($store < $x
    
        echo "-1"
        return
    
  
    // Print the required integers 
    for ($i = 0; $i < $n; $i++) 
        echo $ans[$i]," "
  
    // Driver code 
    $n = 3; $x = 254; $y = 18; 
    findIntegers($n, $x, $y); 
      
    // This code is contributed by Ryuga
?>

chevron_right


Output:

1 1 16


My Personal Notes arrow_drop_up

pawanasipugmailcom

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.