51nod 1149 Pi的递推式

本文介绍了一种使用组合数方法求解特定递推式F(N)的问题,该递推式涉及π,并通过模运算处理大数值结果。文章提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基准时间限制:1 秒 空间限制:131072 KB 分值: 640  难度:8级算法题
 收藏
 关注
F(x) = 1 (0 <= x < 4)
F(x) = F(x - 1) + F(x - pi) (4 <= x)
Pi = 3.1415926535.....
现在给出一个N,求F(N)。由于结果巨大,只输出Mod 10^9 + 7的结果即可。
Input
输入一个整数N(1 <= N <= 10^6)
Output
输出F(N) Mod 10^9 + 7
Input示例
5
Output示例
3
李陶冶  (题目提供者)




【分析】

组合数。辣鸡题目。根本没头绪系列。




【代码】

//51nod 1149 Pi的递推式
#include<bits/stdc++.h>
#define pi acos(-1)
#define ll long long
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=1000005;
const int mod=1e9+7;
int n,m,T,ans;
int fac[mxn],inv[mxn];
inline void init()
{
	int i,j;
	fac[0]=inv[0]=inv[1]=1;
	fo(i,1,n) fac[i]=(ll)fac[i-1]*i%mod;
	fo(i,2,n) inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
	fo(i,1,n) inv[i]=(ll)inv[i]*inv[i-1]%mod;
}
inline ll C(int n,int m)
{
	if(n<m) return 0;
	return (ll)fac[n]*inv[m]%mod*inv[n-m]%mod; 
}
int main()
{
	int i,j;
	scanf("%d",&n);init();
	if(n<4) return puts("1"),0;
	fo(i,0,n-4)
	{
		int t=((double)n-4-i)/pi;
		ans=(ans+C(t+i,i))%mod;
	}
	for(i=0;pi*i<=n-4;i++)
	{
		int t=(n-4-pi*i);
		ans=(ans+C(t+i,i))%mod;
	}
	printf("%d\n",ans);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值