题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1718
————————————————————————————————————————————
1718 Cos的多项式
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注
小明对三角函数充满了兴趣,有一天他突然发现一个神奇的性质。
2cos(nx)似乎可以表示成2cos(x)的一个多项式。
但是小明并不能证明它的正确性。
现在给定n,问是否可以表示成这样的多项式,如果可以,只需输出各项系数的和。(Tip:如果这个和很大,那就高精度咯:))
否则输出No
样例解释:2*cos(3x)=(2*cosx)^3-3*(2*cosx),系数为1和-3,他们的和为-2。
Input
一个数表示n(n<=1e15)
Output
如果能表示 输出各项系数和
不能 输出No
Input示例
3
Output示例
-2
————————————————————————————————————————————
我们知道
n | 2con(nx) | 系数和 |
---|---|---|
1 | 2cos(x) | 1 |
2 | (2cos(x))2−2 | -1 |
然后不会了… |
考虑
2cos((n−1)x)=2(cos(nx)cos(x)+sin(nx)sin(x))
2cos((n+1)x)=2(cos(nx)cos(x)−sin(nx)sin(x))
⇒2cos((n−1)x)+2cos((n+1)x)=2cos(nx)×2cos(x)
设
f(n)=2cos(nx)
有
f(n−1)+f(n+1)=f(n)f(1)⇒f(n+1)=f(n)f(1)−f(n−1)⇒f(n+1)=f(n)×2cos(x)−f(n−1)
这样就有了推出所有公式了
然后计算出系数和 震惊的发现其结果竟是有循环节的!!!!
然后打表AC
附本题代码
————————————————————————————————————————
#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N = 200000+7;
LL n;
int a[6] = {1,-1,-2,-1,1,2};
int main(){
scanf("%lld",&n);
printf("%d",a[(n+5)%6]);
return 0;
}