这道题是一道数论题,不可用暴力通过,因为输入范围极大,基本上循环是不能在这道题上使用的了。
前面大佬们讲的我听不懂,于是在教练的帮助下,我利用题面给出的多组样例找到了规律。
在此之前,我们先设输入的数为 $n$ 。
$n$ 分三种情况。
- $n$ 是奇数;
- $n$ 是偶数;
- $n$ 小于等于 $2$;
首先咱们必须把 $n$ 小于等于 $2$ 的这种情况清除掉,众所周知,这种数是不可能存在解的,于是直接输出 -1
并结束程序即可。
之后咱们再看 $n$ 是奇数这种情况,不难发现,输出的第一个数等于 $n ^ {2} \div 2$,而第二个数则是 $(n ^ {2} \div 2) + 1$ 。
$n$ 若是偶数则将其除以 $2$ 转化为奇数,之后输出时乘以 $2$ 即可。
代码如下
#include <iostream>
using namespace std;
long long n;
int main(){
cin >> n;
if(n <= 2){
cout << -1;
return 0;
}
if(n % 2 != 0) cout << ((n * n) / 2) << " " << ((n * n) / 2) + 1;
else{
n /= 2;
cout << (n * n) - 1 << " " << (n * n) + 1;
}
return 0;
}