程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> SDUT 1447 水題(y*y = x*x + n)

SDUT 1447 水題(y*y = x*x + n)

編輯:C++入門知識

SDUT 1447 水題(y*y = x*x + n)


水題

 

Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裡^_^

題目描述

給定一個正整數 n,求一個最小的正整數 x,使得可以找到一個正整數y,且滿足 y*y = n + x*x。

輸入

輸入包含多組測試數據。 每組數據只有一行為 1 個整數 n(0 < n < 10^9)。

輸出

對於每組測試數據,按照題目描述輸出對應的結果,如果找不到這樣的正整數 x ,則輸出 -1。

示例輸入

2
3

示例輸出

-1
1

提示

來源

qinchuan

示例程序

 

 

 

題目知道y*y - x*x = n ----> (y-x)*(y+x) = n 並且(y-x)和(y+x)同奇偶所

 

以根據這個特性就可以做了。但是我就不明白這個題把n定義成long long int 為什麼就

 

是無休止的WA,幾個小時不用干別的了,就在那裡想哪裡出錯了。萬念俱灰的把long

 

long去掉交居然就AC了,搞不懂........

 

 

 

#include
#include
#include
#include
#include
#include
#include

using namespace std;

int n;

void maxx(int &a,int &b)
{
    if(a=1;i--)
        {
            if(n%i == 0)
            {
                x = i;
                y = n/i;
                if(x!=y)
                {
                    maxx(x,y);
                    if((x%2 == 0 && y%2 == 0) || (x%2 == 1 && y%2 == 1))
                    {
                        flag = 1;
                        int px = (x-y)/2;
                        if(minn>px)
                        {
                            minn = px;
                        }
                    }
                }
            }
        }
        if(flag == 0)
        {
            printf("-1\n");
        }
        else
        {
            printf("%d\n",minn);
        }
    }
    return 0;
}



 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved