51nod 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-9
int 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");
	else
		printf("2\n");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值