Hdu 3903 Trigonometric Function(3)

来源:互联网 发布:灵沃软件培训 编辑:程序博客网 时间:2024/05/16 06:34

这道题关于分子已经是有理数的证明过程就不写了,另外想说的一点就是关于强制转换,比方说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;}


 

原创粉丝点击