C++ 给定数字的其他2个毕达哥拉斯三胞胎

C++ 给定数字的其他2个毕达哥拉斯三胞胎,c++,C++,因此,我最近尝试了一个问题并编写了一些代码,但我无法在5个测试用例中通过3个以上的测试。 问题是:给定一个数字N(表示三角形的一个支腿),按递增顺序打印其毕达哥拉斯对(如果存在)。否则,请打印“-1” 输入格式 单整数N 约束 N>N; 如果(n>=0&&n您可以解决一些问题 应修改链接的ifs(如注释中所述,最后一个cout>n){ 如果(n直角三角形的支腿是两条相交以确定直角的边,则剩余的边称为斜边。因此,我们必须打印除输入和斜边之外的一条剩余支腿 解决方案方法: #include&

因此,我最近尝试了一个问题并编写了一些代码,但我无法在5个测试用例中通过3个以上的测试。 问题是:给定一个数字N(表示三角形的一个支腿),按递增顺序打印其毕达哥拉斯对(如果存在)。否则,请打印“-1”

输入格式 单整数N

约束 N>N;
如果(n>=0&&n您可以解决一些问题

  • 应修改链接的
    if
    s(如注释中所述,最后一个
    cout>n){
    
    如果(n直角三角形的支腿是两条相交以确定直角的边,则剩余的边称为斜边。因此,我们必须打印除输入和斜边之外的一条剩余支腿

    解决方案方法:

       #include<iostream>
        #include<cmath>
        using namespace std;
        int main() {    
            int n;
            cin>>n;
            if(n>=0 && n<=2){
                cout<<"-1"<<endl;
                }
            else if (n%2==0){
                cout<<pow((n/2),2)-1<<" "<<pow((n/2),2)+1<<endl;
            }
            else if (n%2==1){
                cout<< 2*((n-1)/2)*((n+1)/2) <<" "<<pow((n+1)/2,2) + pow((n-1)/2,2)<<endl;
            }
    
            else{
                cout<<"-1"<<endl;
            }
            return 0;
        }
    
    如果m>n>0是整数,那么(m2-n2,2mn,m2+n2)是勾股三元组。这很容易用一点代数来理解。因此,插入不同的(m,n)将得到不同的三元组。 现在,我们的目标是找到一个三重形式(M2-N2,2Mn,M2+N2),其中我们的输入值是CATHETI(腿)之一。注意,CATITI是M2-N2和2Mn。同时,注意到第二个CythEt始终是偶数的。因此,考虑两种情况是有意义的:

    如果a是偶数,那么让我们试着将它与第二个凯瑟图,2mn相等,也就是说,让我们试着找到一个(m,n)对,这样2mn=a。在这种情况下,是偶数,所以我们可以除以2。我们有mn=a/2。因此,我们所要做的就是找到a/2到mn的因式分解,这样m>n。你可以尝试各种因式分解方法——甚至是天真的O(√a) 时间方法会过去-但在这种情况下,我们甚至不需要这样做,因为平凡的(m,n)=(a/2,1)是有效的!这给了我们三重解((a^2)/4-1,a,(a^2)/4+1)。注意,(a^2)/4是一个整数,因为a是偶数

    如果a是奇数,那么我们不能将它与第二个cathetus相等,那么让我们尝试m2-n2,也就是说,我们想找到一个(m,n),这样m2-n2=a。节点m2-n2=(m+n)(m-n),那么所有的都可以归结为分解!让我们再次尝试我们的平凡分解:(m+n,m-n)=(a,1)我们得到的是一个由两个线性方程组组成的系统:m+n=a和m-n=1,其解为m=(a+1)/2和n=(a-1)/2。反过来,我们得到了三重(a,(a^2-1)/2,(a^2+1)/2)。注意,(a^2+1)/2是一个整数,因为a是奇数

    int main()
    {
      long long n;
      cin>>n;
      if (n<=2)
        cout<<"-1";
      else if (n % 2 == 0)
      {
        // Calculating for even case
        long long var = 1 * n * n / 4;
        cout<<var - 1<<" ";
        cout<<var + 1;
      }
      else if (n % 2 != 0)
      {
        //Calculating for odd case
        long long var = 1 * n * n + 1;
        cout<<var / 2 - 1<<" ";
        cout<<var / 2;
      }
    return 0;
    }
    
    intmain()
    {
    长n;
    cin>>n;
    
    如果(nA)毕达哥拉斯三元组由整数组成。
    pow
    生成一个浮点数。一个好的第一步是编写一个整数平方函数……如果使用一组已知的三元组,应该能够找到它的故障点。可以使用开始测试。最终
    否则
    永远无法到达。。。
    int main()
    {
      long long n;
      cin>>n;
      if (n<=2)
        cout<<"-1";
      else if (n % 2 == 0)
      {
        // Calculating for even case
        long long var = 1 * n * n / 4;
        cout<<var - 1<<" ";
        cout<<var + 1;
      }
      else if (n % 2 != 0)
      {
        //Calculating for odd case
        long long var = 1 * n * n + 1;
        cout<<var / 2 - 1<<" ";
        cout<<var / 2;
      }
    return 0;
    }