📜  从单个整数生成毕达哥拉斯三元组

📅  最后修改于: 2021-05-04 16:21:10             🧑  作者: Mango

给定一个整数n \in [1,1000000000],生成毕达哥拉斯三元组,如果可能的话,它的侧面之一包含n。

例子 :

Input : 22
Output : Pythagoras Triplets exist i.e. 22 120 122

Input : 4
Output : Pythagoras Triplets exist i.e.  4 3 5

Input : 2
Output : No Pythagoras Triplet exists 

解释:
定义:“毕达哥拉斯三胞胎”是毕达哥拉斯定理的整数解,即它们满足方程a^2 + b^2 = c^2

我们的任务是从整数值生成一个三元组。这可能是一个令人困惑的任务,因为给我们的那一面可能是斜边或非斜边。
通过将三元组放在一个公式中开始计算三元组,可以推论出只有1和2不可能有三元组。
更多,
如果n是偶数,我们的三胞胎是通过公式计算的(n^2/4 - 1)^2 + n^2 = (n^2/4 + 1)^2

如果n是奇数,我们的三胞胎是通过公式计算的(n^2-1)^2/2  + n^2 = (n^2+1)^2/2

证明:
毕达哥拉斯定理也可以写成c^2 - b^2 = a^2
即a * a =(cb)(c + b)
a * ax 1 = a * a,因此c = (a^2+1)/2b = (a^2 - 1)/2 ,如果n为奇数,则此解决方案有效。
为了获得均匀的解决方案, c+b = n^2/2, c-b=2 ,因此,当n为偶数时,我们得到上述公式。

代码

C++
// CPP program to find Pythagoras triplet
// with one side as given number.
#include 
using namespace std;
  
// Function, to evaluate the Pythagoras triplet
// with includes 'n' if possible
void evaluate(long long int n)
{
  
    if (n == 1 || n == 2)
        printf("No Pythagoras Triplet exists");
  
    else if (n % 2 == 0) {
  
        // Calculating for even case
        long long int var = 1LL * n * n / 4;
        printf("Pythagoras Triplets exist i.e. ");
        printf("%lld %lld %lld", n, var - 1, var + 1);
    }
  
    else if (n % 2 != 0) {
  
        // Calculating for odd case
        long long int var = 1LL * n * n + 1;
        printf("Pythagoras Triplets exist i.e. ");
        printf("%lld %lld %lld", n, var / 2 - 1, var / 2);
    }
}
  
// Driver function
int main()
{
    long long int n = 22;
    evaluate(n);
    return 0;
}


Java
// Java program to find 
// Pythagoras triplet 
// with one side as 
// given number.
import java.io.*;
  
class GFG
{
      
// Function, to evaluate 
// the Pythagoras triplet
// with includes 'n' if 
// possible
static void evaluate( int n)
{
    if (n == 1 || n == 2)
        System.out.println("No Pythagoras " + 
                           "Triplet exists");
  
    else if (n % 2 == 0) 
    {
  
        // Calculating for even case
        int var = 1 * n * n / 4;
        System.out.print("Pythagoras Triplets " +
                                  "exist i.e. ");
        System.out.print(n + " ");
        System.out.print(var - 1+ " ");
        System.out.println(var + 1 +" ");
    }
  
    else if (n % 2 != 0) 
    {
  
        int var = 1 * n * n + 1;
        System.out.print("Pythagoras Triplets " + 
                                  "exist i.e. ");
        System.out.print(n + " ");
        System.out.print(var / 2 - 1 + " ");
        System.out.println(var / 2 + " ");
    }
}
  
// Driver Code
public static void main(String[] args) 
{
    int n = 22;
    evaluate(n);
}
}
  
// This code is contributed
// by ajit


Python3
# Python3 program to find 
# Pythagoras triplet with 
# one side as given number.
  
# Function, to evaluate the
# Pythagoras triplet with 
# includes 'n' if possible
def evaluate(n):
    if (n == 1 or n == 2):
        print("No Pythagoras" +
            " Triplet exists");
    elif (n % 2 == 0):
          
        # Calculating for
        # even case
        var = n * n / 4;
        print("Pythagoras Triplets" +
             " exist i.e. ", end = "");
        print(int(n), " ", int(var - 1),
                      " ", int(var + 1));
    elif (n % 2 != 0):
          
        # Calculating for odd case
        var = n * n + 1;
        print("Pythagoras Triplets " + 
             "exist i.e. ", end = "");
        print(int(n), " ", int(var / 2 - 1),
                         " ", int(var / 2));
  
# Driver Code
n = 22;
evaluate(n);
  
# This code is contributed by mits


C#
// C# program to find 
// Pythagoras triplet 
// with one side as 
// given number.
using System;
  
class GFG
{
      
// Function, to evaluate 
// the Pythagoras triplet
// with includes 'n' if 
// possible
static void evaluate(int n)
{
    if (n == 1 || n == 2)
        Console.WriteLine("No Pythagoras " + 
                          "Triplet exists");
      
    else if (n % 2 == 0) 
    {
  
        // Calculating for even case
        int var = 1 * n * n / 4;
        Console.Write("Pythagoras Triplets " +
                               "exist i.e. ");
        Console.Write(n + " ");
        Console.Write(var - 1+ " ");
        Console.WriteLine(var + 1 +" ");
    }
  
    else if (n % 2 != 0) 
    {
        int var = 1 * n * n + 1;
        Console.Write("Pythagoras Triplets " + 
                               "exist i.e. ");
        Console.Write(n + " ");
        Console.Write(var / 2 - 1 + " ");
        Console.WriteLine(var / 2 + " ");
    }
}
  
// Driver Code
static public void Main ()
{
    int n = 22;
    evaluate(n);
}
}
  
// This code is contributed
// by ajit


PHP


输出:

Pythagoras Triplets exist i.e. 22 120 122