hdu 4143 A Simple Problem
Posted li-jia-hao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 4143 A Simple Problem相关的知识,希望对你有一定的参考价值。
题意:给你一个n,求最下的x使得存在一个y从而y2=n+x2成立。
你们这些人就会出些叫做“simple”,“简单”的题来欺负蒟蒻QAQ
思路分析:考虑初中二年级学过的公式:x2-y2=(x-y)*(x+y);那么我们的原式就变成了(y-x)*(y+x)=n;既然如此,我们只需枚举每一对n的因子a,b,判断a+b(2y)模上2是不是0,a-b(2x)模上2是不是零,找出最小解即可,我们在枚举时到根号n就行了,反正是每一对因子(注意相等情况不可取,x不为零)
代码:
1 #include<cstdio> 2 #include<cmath> 3 int main(){ 4 int t; 5 scanf("%d",&t); 6 while(t--){ 7 int n; 8 scanf("%d",&n); 9 int i; 10 int ans=2147483647,flag=0; 11 for(i=1;i<sqrt(n);i++){ 12 if(n%i==0&&(i+n/i)%2==0&&(n/i-i)%2==0){ 13 flag=1; 14 if(n/i-i<ans)ans=n/i-i;//这里计算的是2x 15 } 16 } 17 if(flag) printf("%d ",ans/2); 18 else printf("-1 "); 19 } 20 return 0; 21 }
以上是关于hdu 4143 A Simple Problem的主要内容,如果未能解决你的问题,请参考以下文章
HDU 1757 A Simple Math Problem
A Simple Math Problem HDU - 5974
hdu 5974 A Simple Math Problem
hdu4976 A simple greedy problem.