loj10222

摘要:
贾佳对数学很感兴趣,尤其是序列。在研究斐波那契数列之后,他创造了许多奇怪的数列。例如,s表示斐波那契的前n项和modm的值,即s=modm,其中f_1=f_2=1,f_i=f{i-1}+f{i-2}但这对佳佳来说是小菜一碟。最后,她发现了一个自己无法解决的问题。输入格式输入数据由一行和两个用空格分隔的整数n,m组成。输出格式只有一行,即t的值。示例输入副本55输出副本1数据范围和提示100%数据,1˂=n,m˂=2^31-1。我刚刚看到:t=t(n-1)+n*F_n但这不能用矩阵完成。系数N不断变化。

佳佳对数学,尤其对数列十分感兴趣。在研究完 Fibonacci 数列后,他创造出许多稀奇古怪的数列。例如用 s(n) 表示 Fibonacci 前 n 项和 mod m 的值,即 s(n)=(f_1+f_2+f_3+...+f_n)mod m,其中 f_1=f_2=1,f_i=f_{i-1}+f_{i-2}。可这对佳佳来说还是小菜一碟。

终于,她找到了一个自己解决不了的问题。用 t(n)=(f_1+2*f_2+3*f_3+...+n*f_n)mod m 表示 Fibonacci 数列前 n 项变形后的和 mod m 的值。

现在佳佳告诉你了一个 n 和 m,请求出 t(n) 的值。

输入格式

输入数据包括一行,两个用空格隔开的整数n,m 。

输出格式

仅一行,t(n) 的值。

样例
输入复制
5 5
输出复制
1
 
数据范围与提示

对于 100% 的数据1<=n,m<=2^31-1。

_________________________________________

刚做了几个关于矩阵乘法的题,这个题目没推出来。看了题解才会的!

刚开始看到:T(N)=T(N-1)+N*F_N

但是这个用矩阵没法做,系数N在不断的变。

$T(n)=f_1+2*f_2+...+n*f_n$

$T(n)=sum_{i-1}^ni*f_i$

$S(n)=f_1+f_2+...+f_n$

$S(n)=sum_{i=1}^nf_i$

$n*S(n)=sum_{i=1}^nn*f_i$

$n*S(n)-T(n)=sum_{i=1}^n(n-i)*f_i$

当i==n时,第n-i==0,也就可以去掉了,得到

$n*S(n)-T(n)=sum_{i=1}^{n-1}(n-i)*f_i$

设$P(n)=n*S(n)-T(n)$

则$P(n+1)=P(n)+S(n)$

开始矩阵为

s=[P(1),S(1),f_1,f_{0}]

矩阵p为

1 0 0 0

1 1 0 0 

0 1 1 1

0 1 1 0

那么$s*p^{n-1}$就可以得到P(n)和S(n),n*S(n)-P(n)就是结果。因为要对m取模,所以真正的结果为(n*S(n)-P(n)+m)%m

_________________________________________

 
loj10222第1张loj10222第2张
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 ll n,m;
 5 struct node
 6 {
 7     ll sz[4][4];
 8     node(){memset(sz,0,sizeof sz);}
 9 }s,p,st;
10 
11 node cheng(node a,node b)
12 {
13     node c;
14     for(int i=0;i<4;++i)
15         for(int j=0;j<4;++j)
16             for(int k=0;k<4;++k)
17                 c.sz[i][j]=(c.sz[i][j]+a.sz[i][k]*b.sz[k][j])%m;
18     return c;
19 }
20 
21 node pwr(int n)
22 {
23     if(n==0)return st;
24     node tp=pwr(n/2);
25     node ans=cheng(tp,tp);
26     if(n%2)ans=cheng(ans,p);
27     return ans;
28 }
29 
30 int main()
31 {
32     scanf("%lld%lld",&n,&m);
33     for(int i=0;i<4;++i)st.sz[i][i]=1;
34     p.sz[0][0]=p.sz[1][0]=p.sz[1][1]=p.sz[2][1]=p.sz[2][2]=p.sz[2][3]=p.sz[3][1]=p.sz[3][2]=1;
35     s.sz[0][1]=s.sz[0][2]=1;
36     node tp=pwr(n-1);
37     node ans=cheng(s,tp);
38     cout<<(ans.sz[0][1]*n-ans.sz[0][0]+m)%m<<endl;
39     return 0;
40 }
View Code

免责声明:文章转载自《loj10222》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NDK编译依赖opencv静态库的arm64-v8a动态库阿里云DataV可视化使用疑虑及解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

爬虫发起抓取被服务器拒绝访问返回403禁止访问解决方案

目前,许多网站的API接口返回的http代码返回代码为403,表示禁止访问。如果您也遇到这种情况,请不要急于首先修改网站的相关参数,即高级api的网站。使用浏览器访问。如果浏览器访问api接口,它可以成功。表示已设置权限。接口可能已被修改或无效,此时无法访问。调用此接口时,将捕获异常中的responseBody。数据很可能在该区域。这就是作者遇到的问题。直接...

浅谈 SQL 注入(注入篇)

1、 SQL注入1.1简介什么是SQL注入?它不过滤用户可以严格控制或没有限制的参数,以便用户可以将传入的参数和SQL语句组合成SQL语句,然后将其传输到web服务器。最后,它被传输到数据库以执行添加、删除、修改和查询等操作。基于此,用户可以获取数据库数据或提高其销毁数据库数据的权限。...

微信小游戏流量主广告接入指南!

游戏通过审核发布上线,累计注册用户达到1000后,可以在管理后台开启流量主功能。广告接入广告类型有三种:激励式视频、插屏和BannerBanner广告接入需要注意:1.广告要显示全,不能放在屏幕外。我的游戏被以上原因拒绝了两次。我的banner广告是放在底部正中间,取最小宽度200。也就是尽量的小,不影响游戏操作。激励视频按钮一定要有视频广告相关的提示!...

PX4 飞控源码系统框架介绍

该部分主要是PX4系统的使用的所有的数据结构的集合部分,各种任务和sensor驱动中需要获取的sensor数据都在此部分,还包含各种运行状态的数据结构。...

如何修改cmd控制台默认编码为utf-8

如何修改cmd控制台默认编码为utf-81.打开cmd窗口后,在窗口顶部右击选择属性,选中选项后会看到默认编码为gbk2.然后我们在默认窗口路径内,输入chcp命令后回车936就表示gbk编码3.然后在窗口中输入chcp65001,然后回车,即可看到窗口默认编码为utf-8编码了(65001代表utf-8编码)4.上面的方法每次都要重新设置,接下来的方法是永...

【Mybatis-Plus】使用updateById()、update()将字段更新为null或者空

我检查了以下项目的配置,发现字段级别设置为NOT_由空引起。2不为空,但默认更新策略为Not_ NULL:解决方案1。设置全局字段策略加:classpath:#字段策略IGNORED:NOT_NULL:NOT_EMPTY:NOT_Null2。为所需字段设置单独的字段策略很麻烦。...