http://acm.hdu.edu.cn/showproblem.php?pid=3903
如何判斷的有理性?
由這三個式子:
問題可化歸爲判斷A,B,C的正弦和餘弦是否爲有理數,又由余弦定理
以及
cos(arccos x)=x
若x=p/q,則sqrt(1-x^2)=sqrt(q^2-p^2)/q
故只需判斷q^2-p^2是否爲完全平方數即可。
完整代碼:
/*281ms,356KB*/
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int icase;
scanf("%d", &icase);
__int64 a, b, c, n, m, k;
while (icase--)
{
cin >> a >> b >> c >> n >> m >> k;
__int64 d = 4 * b * b * c * c - (b * b + c * c - a * a) * (b * b + c * c - a * a);
__int64 e = 4 * b * b * a * a - (a * a + b * b - c * c) * (a * a + b * b - c * c);
__int64 f = 4 * a * a * c * c - (a * a + c * c - b * b) * (a * a + c * c - b * b);
__int64 x, y, z;
x = sqrt(d);
y = sqrt(e);
z = sqrt(f);
if (x * x == d && y * y == e && z * z == f) puts("YES");
else puts("NO");
}
}