51nod 1718 Cos的多项式(规律)

来源:互联网 发布:java开发需要掌握技术 编辑:程序博客网 时间:2024/05/17 17:18
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
UsedToBe (题目提供者)
Visual C++的运行时限为:1000 ms ,空间限制为:131072 KB 示例及语言说明请按这里

 允许其他 AC 的用户查看此代码,分享代码才能查看别人的代码并有机会获得勋章


令2*cos(nx)=a1*(2cos(x))^m1+a2*(2cos(x))^m2+......

一眼看过去感觉很难啊,难道求一波展开式?  仔细观察等号右边。为了省去繁琐复杂的质数。我们通常怎么做?

是不是把底数统统换成1,没错就是这样。呢怎么让2*cos(x)=1呢。呢不就是x=π/3嘛

因此令x=π/3带入求出所有2*cos(nx)的值,也就是系数之和的所有可能情况,因为是三角函数,所以是具有周期性的。

当然,这道题也可以打表找规律。

#include<set>#include<map>   #include<stack>          #include<queue>          #include<vector>  #include<string>#include<math.h>          #include<stdio.h>          #include<iostream>          #include<string.h>          #include<stdlib.h>  #include<algorithm> #include<functional>  using namespace std;          #define ll long long       #define inf  1000000000     #define mod 1000000007           #define maxn  1008050#define lowbit(x) (x&-x)          #define eps 1e-9int main(void){ll n;scanf("%lld",&n);if(n%6==1 || n%6==5)printf("1\n");else if(n%6==2 || n%6==4)printf("-1\n");else if(n%6==3)printf("-2\n");elseprintf("2\n");return 0;}


原创粉丝点击