Hdu 3903 Trigonometric Function(3)

这道题关于分子已经是有理数的证明过程就不写了,另外想说的一点就是关于强制转换,比方说int a,b;long long sum;

要计算(a*a+b*b),在a*a+b*b有可能超出int范围时,强制转换成long long时,下面的做法是错误的:

                   sum=(long long)(a*a+b*b)

因为超出以后已经变成负数了,在强制也还是负的;应该这样:

             sum=(long long)a*a+b*b;

这样,在计算过程中转化为long long了;以前在这个问题上是个误区,谨记。。

证明:

引理1:若cosA 为有理数,n 为整数,则cos(nA)也为有理数。
证:n=1,2 时,cos(nA)为有理。
若 n=1..k 时均成立,即n<=k 时,cos(nA)为有理数,此时有cos(kA) =
cos((k-1)A)*cos(A) - sin((k-1)A)*sin(A),故sin((k-1)A)*sin(A)
有理。
当 n=k+1 时:
有cos((k+1)A) = cos((k-1)A)*cos(2A) - sin((k-1)A)*sin(2A) =
cos((k-1)A)*cos(2A) - sin((k-1)A)*2*sinA*cosA.
由于sin((k-1)A)*sin(A)与cos(nA)(其中n<=k)有理.
故cos((k+1)A)有理,所以对所有正整数n,cos(nA)为有理数,由此可得对
所有整数n,cos(nA)为有理数。证毕

引理 2:若cosA 为有理数,则sin(nA) = u*sinA,其中u 为一有理数。
证:n=1 时成立。
若 n=k 成立,即sin(kA)=u*sinA,其中u 为有理数,则sin((k+1)A) =
sin(kA)*cosA + sinA*cos(kA) , 由引理1 得cos(kA) 有理, 故
sin((k+1)A) = (u*cosA+cos(kA)) * sinA = v*sinA 中的v 为有理
数,得证。



#include<stdio.h>
#include<math.h>
int main()
{
    int t,a,b,c,n,m,k;
    long long int sum,p;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d%d%d",&a,&b,&c,&n,&m,&k);    
        sum=(4ll*a*a*b*b)-((long long )a*a+b*b-c*c)*((long long)a*a+b*b-c*c);
        p=(long long)sqrt((double)sum);
        if(p*p==sum)
          printf("YES\n");
        else
          printf("NO\n");
    }
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值