📌  相关文章
📜  检查一个数字是否可以表示为两个正完美立方体的总和

📅  最后修改于: 2021-04-17 16:06:58             🧑  作者: Mango

给定一个整数N ,任务是检查N是否可以表示为两个正理想立方体的总和。

例子:

方法:这个想法是在地图中存储从1N的立方根的所有数字的理想立方体,并检查N是否可以表示为地图中存在的两个数字的总和。请按照以下步骤解决问题:

  • 初始化一个有序映射,例如多维数据集,以按排序的顺序存储前N个自然数的完美多维数据集。
  • 遍历该映射并检查总和等于N的对。
  • 如果发现这样的对的总和为N ,则打印“是” 。否则,打印“否”

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
 
// Function to check if N can be represented
// as sum of two perfect cubes or not
void sumOfTwoPerfectCubes(int N)
{
    // Stores the perfect cubes
    // of first N natural numbers
    map cubes;
    for (int i = 1; i * i * i <= N; i++)
        cubes[i * i * i] = i;
 
    // Traverse the map
    map::iterator itr;
    for (itr = cubes.begin();
         itr != cubes.end(); itr++) {
 
        // Stores first number
        int firstNumber = itr->first;
 
        // Stores second number
        int secondNumber = N - itr->first;
 
        // Search the pair for the first
        // number to obtain sum N from the Map
        if (cubes.find(secondNumber)
            != cubes.end()) {
            cout << "True";
            return;
        }
    }
 
    // If N cannot be represented as
    // sum of two positive perfect cubes
    cout << "False";
}
 
// Driver Code
int main()
{
    int N = 28;
 
    // Function call to check if N
    // can be represented as
    // sum of two perfect cubes or not
    sumOfTwoPerfectCubes(N);
 
    return 0;
}


Java
// Java program for the above approach
import java.util.*;
class GFG
{
 
  // Function to check if N can be represented
  // as sum of two perfect cubes or not
  public static void sumOfTwoPerfectCubes(int N)
  {
 
    // Stores the perfect cubes
    // of first N natural numbers
    HashMap cubes = new HashMap<>();
    for (int i = 1; i * i * i <= N; i++)
      cubes.put((i * i * i), i);
 
    // Traverse the map
    Iterator > itr
      = cubes.entrySet().iterator();
    while (itr.hasNext())
    {
      Map.Entry entry = itr.next();
 
      // Stores first number
      int firstNumber = entry.getKey();
 
      // Stores second number
      int secondNumber = N - entry.getKey();
 
      // Search the pair for the first
      // number to obtain sum N from the Map
      if (cubes.containsKey(secondNumber))
      {
        System.out.println("True");
        return;
      }
    }
 
    // If N cannot be represented as
    // sum of two positive perfect cubes
    System.out.println("False");
  }
 
  // Driver code
  public static void main(String[] args)
  {
    int N = 28;
 
    // Function call to check if N
    // can be represented as
    // sum of two perfect cubes or not
    sumOfTwoPerfectCubes(N);
  }
}
 
// This code is contributed by shailjapriya.


Python3
# Python3 program for the above approach
 
# Function to check if N can be represented
# as sum of two perfect cubes or not
def sumOfTwoPerfectCubes(N) :
 
    # Stores the perfect cubes
    # of first N natural numbers
    cubes = {}
    i = 1
    while i*i*i <= N :
        cubes[i*i*i] = i
        i += 1
  
    # Traverse the map
    for itr in cubes :
  
        # Stores first number
        firstNumber = itr
  
        # Stores second number
        secondNumber = N - itr
  
        # Search the pair for the first
        # number to obtain sum N from the Map
        if secondNumber in cubes :
            print("True", end = "")
            return
  
    # If N cannot be represented as
    # sum of two positive perfect cubes
    print("False", end = "")
 
N = 28
 
# Function call to check if N
# can be represented as
# sum of two perfect cubes or not
sumOfTwoPerfectCubes(N)
 
# This code is contributed by divyeshrabadiya07.


C#
// C# program for the above approach
using System;
using System.Collections.Generic;
using System.Linq;
 
class GFG{
 
  // Function to check if N can be represented
  // as sum of two perfect cubes or not
  public static void sumOfTwoPerfectCubes(int N)
  {
 
    // Stores the perfect cubes
    // of first N natural numbers
    Dictionary cubes = new Dictionary();
    for (int i = 1; i * i * i <= N; i++)
      cubes.Add((i * i * i), i);
     
    var val = cubes.Keys.ToList();
    foreach(var key in val)
    {
      // Stores first number
      int firstNumber = cubes[1];
 
      // Stores second number
      int secondNumber = N - cubes[1];
 
      // Search the pair for the first
      // number to obtain sum N from the Map
      if (cubes.ContainsKey(secondNumber))
      {
        Console.Write("True");
        return;
      }
    }
 
    // If N cannot be represented as
    // sum of two positive perfect cubes
    Console.Write("False");
  }
 
 
// Driver Code
static public void Main()
{
    int N = 28;
 
    // Function call to check if N
    // can be represented as
    // sum of two perfect cubes or not
    sumOfTwoPerfectCubes(N);
}
}
 
// This code is contributed by code_hunt.


输出
True

时间复杂度: O(N 1/3 * log(N 1/3 ))
辅助空间: O(N 1/3 )