【BestCoder Round #82 (div.2)】HDU5675ztr loves math

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5675

问题描述
ztr喜欢研究数学,一天,他在思考直角三角形方程组的Lower版,即n=x^{2}-y^{2}n=x2y2,他想知道,对于给出的n,是否会有正整数解。
输入描述
有T组数据,第一行为一个正整数T(T<=10^{6})T(T<=106),每一行一个正整数n,n <=10^{18}n<=1018
输出描述
如果有正整数解,输出TrueTrue,否则输出FalseFalse
输入样例
4
6
25
81
105
输出样例
False
True
True
True
Hint
对于第四个样例,有一组解13^{2}-8^{2}=10513282=105

好吧,这个题目刚开始是想分解质因子,然后枚举,很明显这是不可行的,我的思维是有多糟糕。。。

z=x^2-y^2=(x-y)(x+y),令a=x-y,b=x+y,所以x=(a+b)/2

所以,显然,如果有解,那么a+b为偶数。即:a,b同为奇数或者偶数

当a,b为奇数,x,y则一奇一偶,那么x^2-y^2肯定为奇数,(k+1+b)^2-(k+b)^2=2k+2b+1,奇数无疑

当a,b为偶数,x,y则奇偶相同,那么x^2-y^2肯定为偶数,(k+2+b)^2-(k+b)^2=2(2k+2b+2)=4(k+b+1),4的倍数

不过注意,1和4不符合情况

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int t;
    cin>>t;
    long long n;
    while(t--){
        cin>>n;
        if(n<3||n==4){
            cout<<"False"<<endl;
        }else if(n%2!=0||n%4==0){
            cout<<"True"<<endl;
        }else{
            cout<<"False"<<endl;
        }
    }
    return 0;
}


你可能感兴趣的:(【BestCoder Round #82 (div.2)】HDU5675ztr loves math)