题意:给定n,求最小的正整数x,使得 n+x^2也是完全平方数。
分析:(要是数论题都这样就好了)
设y²=x²+n
n=y²-x²=(y+x)(y-x)
令a=y+x,b=y-x
x=(a-b)/2
又∵a*b=n
∴只需要扫一遍所有的a*b=n,找出其中满足x是正整数的最大值即可,
也就是(a-b)/2是正整数,找不到返回-1即可
代码:
#include<cstdio> #include<cmath> using namespace std; int chuli(int n) { for(int i=sqrt(n);i>=1;i--) if(n%i==0&&(i+n/i)%2==0&&(i-n/i)) return abs(i-n/i)/2; return -1; } int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); printf("%d ",chuli(n)); } return 0; }