10299 Problem A: Modular Fibonacci(斐波那契的矩阵快速幂)

Problem A: Modular Fibonacci

The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...) are defined by the recurrence:

F0 = 0
F1 = 1
Fi = Fi-1 + Fi-2 
for i>1

Write a program which calculates Mn = Fn mod 2m for given pair of n and m0 n 2147483647 and 0 m20. Note that a mod b gives the remainder when a is divided by b.

Input and Output

Input consists of several lines specifying a pair of n and m. Output should be corresponding Mn, one per line.

Sample Input

11 7
11 6

Sample Output

89
25
题意:给定n和m,求斐波那契数列第Fn %(2 ^ m)

思路:斐波那契数列的矩阵快速幂  [1 1] * [Fn + 1]  =  [Fn + 1 + Fn = Fn + 2] 这样只要求出[1 1] 这个矩阵的n次方乘上[F2] 就可以得到第Fn项。然后就是矩阵的

                                                              [1 0]    [Fn]             [Fn + 1]                                                  [1 0]                                       [F1]                                                                  快速幂取模。注意要用longlong

代码:

#include <stdio.h>
#include <string.h>

long long n, mm;

struct ju {
	long long m[2][2];
	ju() {
		memset(m, 0, sizeof(m));	
	}
} m1, m2, m3, m4;

ju mul(ju a, ju b) {
	ju c;
	for (int i = 0; i < 2; i ++) {
		for (int j = 0; j < 2; j ++) {
			for (int k = 0; k < 2; k ++) {
				c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j]) % mm;		
			}
		}
	}
	return c;
}

void mi(long long k) {
	m4.m[0][0] = m4.m[1][1] = m1.m[0][0] = m1.m[0][1] = m1.m[1][0] = 1; 
	m4.m[0][1] = m4.m[1][0] = m1.m[1][1] = 0;
	while (k != 1) {
		m2 = m1;
		m3 = mul(m1, m1);
		m1 = m3;
		if (k & 1) {
			m3 = mul(m4, m2);
			m4 = m3;
		}
		k = k>>1;
	}
	m3 = mul(m1, m4);
	m1 = m3;
}
int main() {
	while (~scanf("%lld%lld", &n, &mm)) {
		if (n == 0 || mm == 0) {
			printf("0\n"); continue;
		}
		mm = 1<<mm;
		mi(n);
		printf("%lld\n", m1.m[0][1]); 
	}
	return 0;
}



(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
<think>好的,用户让我解析另一个日志:“CapsuleView updateData isImmediateCardType: false category: modular this.category: modular hasPendingData: false”。首先,我需要确定用户的使用场景。之前的对话是关于Android视图绘制事件的日志解析,现在这个日志看起来可能和某个UI组件的数据更新有关,特别是CapsuleView,可能是某种胶囊式视图或卡片式组件。 用户可能是安卓开发者,或者正在处理与UI相关的bug,比如数据更新不及时或者视图状态异常。他们可能需要了解这个日志的含义,以排查问题或优化代码。需要确认日志中的各个参数代表什么,比如isImmediateCardType、category、hasPendingData等。 接下来,我需要分解日志的结构。每个字段可能对应代码中的某些变量或状态。例如,“isImmediateCardType: false”可能表示当前卡片的类型不是立即执行的类型,而“category: modular”可能指该视图属于模块化分类。hasPendingData为false可能说明没有待处理的数据需要更新。 需要思考这些参数如何影响CapsuleView的行为。比如,isImmediateCardType为false可能意味着数据更新不是即时生效,可能有延迟或需要条件触发。category是modular可能涉及布局或数据加载的方式。hasPendingData为false表示当前没有挂起的数据,可能影响是否触发数据刷新。 用户可能想知道这个日志是否正常,或者在什么情况下会出现这样的日志条目。比如,当视图更新时,这些参数的状态是否符合预期,是否存在潜在的问题,如数据未正确加载或视图未按预期更新。 另外,结合之前用户询问的viewroot_draw_event,可能用户在处理UI渲染或数据加载的问题,这两个日志可能有关联,比如视图的更新触发了数据加载,或者数据加载后触发了视图的重新绘制。需要确保解析时覆盖这些可能的关联点。 可能还需要考虑不同场景下的参数变化,例如,如果hasPendingData为true会发生什么,或者category不同是否会影响数据处理流程。用户可能需要这些信息来调试或优化他们的代码。 最后,要确保解析清晰,分步骤说明每个参数的意义,并结合可能的场景和排查建议,帮助用户理解日志背后的逻辑和潜在问题。需要避免技术术语过多,同时保持专业性,确保用户能够根据解析结果采取相应的行动。</think>根据日志内容`CapsuleView updateData isImmediateCardType: false category: modular this.category: modular hasPendingData: false`,结合Android UI更新逻辑,解析如下: --- ### 一、**日志背景定位** 此日志属于**胶囊式视图(CapsuleView)的数据更新流程**,常见于系统级卡片化UI(如通知卡片、快捷设置模块等)。 核心意义:记录视图在数据刷新时的**状态参数和决策逻辑**。 --- ### 二、**字段逐项解析** #### 1. **`CapsuleView updateData`** - **CapsuleView**:一种**胶囊/卡片式容器组件**,通常用于聚合信息(如天气卡片、快捷开关等)。 - **updateData**:触发数据更新的入口方法,可能通过`onDataChanged()`或`notifyDataSetChanged()`调用。 #### 2. **`isImmediateCardType: false`** - **isImmediateCardType**:控制数据更新的**时效性策略**。 - `false`:表示当前卡片类型**非即时刷新**(例如后台静默更新,或需等待用户交互后再加载)。 - `true`:通常用于实时性要求高的场景(如计时器、运动传感器数据)。 #### 3. **`category: modular` 与 `this.category: modular`** - **category**:卡片的**分类标识**,此处为`modular`(模块化设计)。 - 含义:该卡片属于**可拆卸/动态组合的模块**(如ColorOS的“ Breeno 速览”中的可定制卡片)。 - `this.category`:当前实例的分类属性,与传入参数一致,说明**无需分类切换**。 #### 4. **`hasPendingData: false`** - **hasPendingData**:标记是否存在**待处理的异步数据**。 - `false`:表示无未完成的数据请求,本次更新可直接使用缓存或同步数据。 - `true`:需等待网络请求、数据库查询等异步操作完成后再渲染。 --- ### 三、**技术流程还原** 此日志对应的数据更新行为: 1. **更新触发条件**:外部事件(如时间变化、传感器数据到达)或用户操作触发了`CapsuleView`的数据刷新。 2. **策略判定**: - 因`isImmediateCardType=false`,系统采用**延迟更新或批量更新策略**(避免频繁刷新导致性能损耗)。 - 因`category=modular`,可能加载模块化预设模板(如固定布局 + 动态数据绑定)。 3. **数据源检查**: - `hasPendingData=false`确认无未完成的数据任务,直接使用现有数据(或本地缓存)。 4. **界面渲染**: - 若数据无变化,可能跳过重绘;若数据变化,触发`onMeasure()`→`onLayout()`→`onDraw()`流程。 --- ### 四、**关联场景与排查建议** #### 1. **典型场景** - **系统模块更新**: ✓ 桌面天气卡片定时刷新(每小时更新温度) ✓ 快捷设置面板的蓝牙设备列表更新 - **用户交互响应**: ✓ 滑动折叠屏时动态调整卡片布局 #### 2. **异常排查方向** - **数据未更新**: ✓ 检查`isImmediateCardType`策略是否阻止了预期刷新(如本应`true`但误设`false`)。 ✓ 确认`hasPendingData`未被错误标记(如异步回调未触发`hasPendingData=false`)。 - **性能问题**: ✓ 若`isImmediateCardType=false`但日志高频出现,需检查更新条件是否过于宽松。 --- ### 五、**扩展技术说明** - **Android Jetpack中的`RecyclerView`对比**: `CapsuleView`的`modular`分类类似`RecyclerView`的模块化设计,但可能深度定制了系统级缓存策略(如`hasPendingData`标记)。 - **OPPO ColorOS特性**: OPPO的`CapsuleView`常与`Breeno`服务集成,`modular`分类可能关联AI驱动的动态内容推荐(需系统权限)。 --- 如需进一步验证,可通过以下命令抓取视图层级: ```bash adb shell dumpsys activity top # 查看当前活动的视图结构 adb shell dumpsys gfxinfo # 检查渲染性能 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值