📜  给定数字的Spt函数或最小零件函数

📅  最后修改于: 2021-05-17 01:40:43             🧑  作者: Mango

给定整数N,任务是找到数字N的Spt函数。

例子:

方法:想法是考虑从1到N的每个整数,并将其添加到答案向量中,然后再次求和以减少总和的剩余元素。为避免再次打印相同的表示形式,将按升序构造每个表示形式。如果达到了N的表示形式,我们将找到答案向量中存在的最小元素的频率,并将其添加到Spt值变量中,最后打印Spt变量的值。

下面是上述方法的实现:

C++
// C++ implemetation to find the
// Spt Function to given number
 
#include 
using namespace std;
 
// variable to store spt
// function of a number
int spt = 0;
 
// Function to add value
// of frquency of minimum element
// among all representations of n
void printVector(vector& arr)
{
    int min_i = INT_MAX;
    for (int i = 0; i < arr.size(); i++)
        min_i = min(min_i, arr[i]);
 
    // find the value of frquency
    // of minimum element
    int freq = count(arr.begin(),
                     arr.end(),
                     min_i);
 
    // calculate spt
    spt += freq;
}
 
// Recursive function to find
// different ways in which
// n can be written as a sum of
// at one or more positive integers
void findWays(vector& arr,
              int i, int n)
{
    // if sum becomes n,
    // consider this representation
    if (n == 0)
        printVector(arr);
 
    // start from previous element
    // in the representation till n
    for (int j = i; j <= n; j++) {
 
        // include current element
        // from representation
        arr.push_back(j);
 
        // call function again
        // with reduced sum
        findWays(arr, j, n - j);
 
        // backtrack - remove current
        // element from representation
        arr.pop_back();
    }
}
 
// Function to find
// the spt function
void spt_function(int n)
{
 
    vector arr;
 
    // Using recurrence find
    // different ways in which
    // n can be written as a sum of
    // at 1 or more positive integers
    findWays(arr, 1, n);
 
    cout << spt;
}
 
// Driver Code
int main()
{
    int N = 4;
    spt_function(N);
    return 0;
}


Java
// Java implemetation to find the
// Spt Function to given number
import java.util.*;
 
class GFG{
 
// Variable to store spt
// function of a number
static int spt = 0;
 
// Find the value of frquency
// of minimum element
static int count(Vector arr, int min_i)
{
    int count = 0;
     
    for(int i = 0; i < arr.size(); i++)
        if(min_i == arr.get(i))
        count++;
         
    return count;
}
 
// Function to add value of
// frquency of minimum element
// among all representations of n
static void printVector(Vector arr)
{
    int min_i = Integer.MAX_VALUE;
    for(int i = 0; i < arr.size(); i++)
        min_i = Math.min(min_i, arr.elementAt(i));
 
    // Find the value of frquency
    // of minimum element
    int freq = count(arr, min_i);
 
    // Calculate spt
    spt += freq;
}
 
// Recursive function to find
// different ways in which
// n can be written as a sum of
// at one or more positive integers
static void findWays(Vector arr,
                     int i, int n)
{
     
    // If sum becomes n, consider
    // this representation
    if (n == 0)
        printVector(arr);
 
    // Start from previous element
    // in the representation till n
    for(int j = i; j <= n; j++)
    {
         
        // Include current element
        // from representation
        arr.add(j);
 
        // Call function again
        // with reduced sum
        findWays(arr, j, n - j);
 
        // backtrack - remove current
        // element from representation
        arr.remove(arr.size() - 1);
    }
}
 
// Function to find
// the spt function
static void spt_function(int n)
{
    Vector arr = new Vector<>();
 
    // Using recurrence find
    // different ways in which
    // n can be written as a sum of
    // at 1 or more positive integers
    findWays(arr, 1, n);
 
    System.out.print(spt);
}
 
// Driver Code
public static void main(String[] args)
{
    int N = 4;
     
    spt_function(N);
}
}
 
// This code is contributed by amal kumar choubey


Python3
# Python3 implemetation to find the
# Spt Function to given number
import sys
 
# Variable to store spt
# function of a number
spt = 0
 
# Function to add value
# of frquency of minimum element
# among all representations of n
def printVector(arr):
   
    global spt
     
    min_i = sys.maxsize
    for i in range(len(arr)):
        min_i = min(min_i, arr[i])
 
    # Find the value of frquency
    # of minimum element
    freq = arr.count(min_i)
 
    # Calculate spt
    spt += freq
 
# Recursive function to find
# different ways in which
# n can be written as a sum of
# at one or more positive integers
def findWays(arr, i, n):
   
    # If sum becomes n,
    # consider this representation
    if (n == 0):
        printVector(arr)
 
    # Start from previous element
    # in the representation till n
    for j in range(i, n + 1):
 
        # Include current element
        # from representation
        arr.append(j)
 
        # Call function again
        # with reduced sum
        findWays(arr, j, n - j)
 
        # Backtrack - remove current
        # element from representation
        del arr[-1]
 
# Function to find
# the spt function
def spt_function(n):
 
    arr = []
 
    # Using recurrence find
    # different ways in which
    # n can be written as a sum of
    # at 1 or more positive integers
    findWays(arr, 1, n)
 
    print(spt)
 
# Driver Code
if __name__ == '__main__':
   
    N = 4
    spt_function(N)
 
# This code is contributed by mohit kumar 29


C#
// C# implemetation to find the
// Spt Function to given number
using System;
using System.Collections.Generic;
 
class GFG{
 
// Variable to store spt
// function of a number
static int spt = 0;
 
// Find the value of frquency
// of minimum element
static int count(List arr, int min_i)
{
    int count = 0;
 
    for(int i = 0; i < arr.Count; i++)
        if (min_i == arr[i])
            count++;
 
    return count;
}
 
// Function to add value of
// frquency of minimum element
// among all representations of n
static void printList(List arr)
{
    int min_i = int.MaxValue;
    for(int i = 0; i < arr.Count; i++)
        min_i = Math.Min(min_i, arr[i]);
 
    // Find the value of frquency
    // of minimum element
    int freq = count(arr, min_i);
 
    // Calculate spt
    spt += freq;
}
 
// Recursive function to find
// different ways in which
// n can be written as a sum of
// at one or more positive integers
static void findWays(List arr,
                          int i, int n)
{
 
    // If sum becomes n, consider
    // this representation
    if (n == 0)
        printList(arr);
 
    // Start from previous element
    // in the representation till n
    for(int j = i; j <= n; j++)
    {
         
        // Include current element
        // from representation
        arr.Add(j);
 
        // Call function again
        // with reduced sum
        findWays(arr, j, n - j);
 
        // backtrack - remove current
        // element from representation
        arr.RemoveAt(arr.Count - 1);
    }
}
 
// Function to find
// the spt function
static void spt_function(int n)
{
    List arr = new List();
 
    // Using recurrence find
    // different ways in which
    // n can be written as a sum of
    // at 1 or more positive integers
    findWays(arr, 1, n);
 
    Console.Write(spt);
}
 
// Driver Code
public static void Main(String[] args)
{
    int N = 4;
 
    spt_function(N);
}
}
 
// This code is contributed by amal kumar choubey


Javascript


输出:
10