HDU 4291 (矩阵快速幂+循环节)

瑞数jsvmp算法还原流程讲解 ​ 又是很久没写文章了,今天水一篇文章吧,鉴于之前有看到过别人的文章被警告的案例,所以这篇文章就仅写一下还原瑞数vmp的大概流程吧(仅记录下自己还原的思路) 阅读详情
A Short problem
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1026    Accepted Submission(s): 407

Problem Description
According to a research, VIM users tend to have shorter fingers, compared with Emacs users.
Hence they prefer problems short, too. Here is a short one:
Given n (1 <= n <= 1018), You should solve for  g(g(g(n))) mod 109 + 7
where
g(n) = 3g(n - 1) + g(n - 2)
g(1) = 1
g(0) = 0

Input
There are several test cases. For each test case there is an integer n in a single line.
Please process until EOF (End Of File).

Output

  For each test case, please print a single line with a integer, the corresponding answer to this case.


Sample Input
0
1
2
 
Sample Output
0
1

42837

循环节:对于连续的模操作,总会出现循环的情况。在这道题里,可以首先暴力求出每一层中的循环节的大小。代码如下:

/*
int main()
{
    Int g0=0,g1=1,tem=-1;
    for(Int i=1;;i++)
    {
        tem = (3*g1%mod+g0%mod)%mod;
        g0=g1;
        g1=tem;
        if(g0 == 0 && g1 == 1)
        {
            cout << i << endl;
            break;
        }
    }
    return 0;
}
*/
//1000000007
//222222224
//183120

即,对于外层要模1000000007,求得循环节是222222224,也就是在第二层里每222222224次操作就回出现循环。同理,第三层根据222222224可以求得循环节是183120.

接下来就是进行三层的矩阵快速幂,因为g(n)=3*g(n-1)+g(n-2),故根据矩阵乘法运算可设2*2矩阵a为3,1;1,0。很明显a*a=10,3;3,1。a[0][0] = g(3),a[0][1]=a[1][0]=g(2),a[1][1]=g(1).

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define mod1 1000000007LL
#define mod2 222222224LL
#define mod3 183120LL
using namespace std;

typedef __int64 Int;

struct Matrix
{
    Int mt[2][2];
};

Matrix cal(Matrix m,Matrix w,Int mod)
{
    Matrix ret;
    for(int i=0; i<=1; i++)
        for(int j=0; j<=1; j++)
            ret.mt[i][j] = 0;
    for(int i=0; i<=1; i++)
    {
        for(int j=0; j<=1; j++)
        {
            for(int k=0; k<=1; k++)
            {
                ret.mt[i][j] += m.mt[i][k]%mod*w.mt[k][j];
                ret.mt[i][j] %= mod;
            }
        }
    }
    return ret;
}

Int fastPower(Matrix a,Int tim,Int mod)
{
    Matrix ret;
    ret.mt[0][0] = 1,ret.mt[0][1]=ret.mt[1][0] = 0,ret.mt[1][1] = 1;
    while(tim)
    {
        if(tim & 1)
            ret = cal(ret,a,mod);
        tim >>= 1;
        a = cal(a,a,mod);
    }
    return ret.mt[0][1];
}

int main()
{
    Int n;
    while(cin >> n)
    {
        if(n < 2)
        {
            printf("%I64d\n",n);
            continue;
        }
        Matrix cst;
        cst.mt[0][0] = 3,cst.mt[0][1]=cst.mt[1][0] = 1,cst.mt[1][1] = 0;
        Int ans = fastPower(cst,fastPower(cst,fastPower(cst,n,mod3),mod2),mod1);
        cout << ans << endl;
    }
}


SIMATIC S7-1200, S7-1500 PID 控制[手册] 立即下载

相关推荐

Simplicity Studio V5与EFR32BG22蓝牙开发环境实战指南

本文详细介绍了Simplicity Studio V5集成开发环境与EFR32BG22蓝牙芯片的开发实战指南。内容涵盖开发环境安装、SDK配置、项目创建、调试烧录、外设驱动集成及常见问题解决方案,帮助开发者快速上手物联网蓝牙应用开发,并充分利用EFR32BG22的低功耗与高集成度特性。

v5w6x的博客 320

HDU 4291 A Short problem(循环节 + 快速幂)

题目链接:HDU 4291 题意:g(0)=0,g(1)=1,g(n)=3g(n-1)+g(n-2),mod=1000000007。求g(g(g(n)))%mod。 分析: 看了题解才发现是循环节....... 完全不会啊. 这是别人博客的解释:https://blog.youkuaiyun.com/weixin_34233421/article/details/86059283 对于...

qq_40728222的博客 227

CANdelaStudio实战:如何用19服务快速编辑DTC快照数据(附Excel模板)

本文详细介绍了在CANdelaStudio中利用19服务高效编辑DTC快照数据的进阶技巧。通过导出DTC池至Excel进行批量编辑,结合‘Copy from DTC Pool’功能实现配置复用,并分享了构建自定义Excel模板与字段映射的实用方法,帮助工程师将繁琐的手动配置转化为工程化的批量处理,大幅提升诊断数据库开发效率。

weixin_29230773的博客 192

HDU----(4291)A Short problem(快速矩阵幂)

A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1716    Accepted Submission(s): 631 Problem Description   According to a rese...

weixin_34407348的博客 153

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

UI-TARS本地部署

UI-TARS是一个用于本地部署的交互控制模型,支持桌面应用的自动化操作。部署步骤包括:首先,从官方GitHub仓库下载项目源码和模型checkpoint;其次,使用vLLM框架进行本地模型部署,启动API服务;最后,通过客户端调用API实现功能。部署过程中可能遇到pynvml模块或模型配置问题,提供了相应的解决方案。此外,还支持通过UI-TARS-Desktop客户端进行本地桌面应用的交互控制。整体流程旨在帮助用户快速实现UI-TARS的本地部署与应用。

DYF的博客 2531

【HDU4291】 矩阵快速幂(寻找循环节)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291 题目大意:g(0) = 0,g(1) = 1,g(n) = 3g(n - 1) + g(n - 2),给你一个n(0<=n<=10^18),求g(g(g(n))) mod (109+ 7)。 解题思路:如果直接利用n做三次矩阵快速幂求解的话,无奈的WA了。因为...

baidui8622的博客 264

【图形学】后处理下的HDR、颜色分级、颜色映射与颜色空间

目录 一、Color Grading 1.1概念 1.2 内置在Unity/UE4 二、HDR、LDR与VDR 2.1 LDR 2.2 HDR 2.3 VDR 三、Tone Mapping 3.1 概念 3.2 算法发展史 3.3 ACES算法 四、常见的颜色空间标准 参考 一、Color Grading 1.1概念 Color Grading(颜色分级、颜色校正)俗称调色,是游戏后期处理中最常见也是必要的一个环节。它能够改变或矫正最终图像的颜色和亮度,你可以把它想象...

ColorGalaxy 8419

HDU - 4291 - A Short problem(循环节+矩阵快速幂)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291 思路:如果直接利用n做三次矩阵快速幂求解是不对的。因为三次快速幂对1000000007取模,会超精度。所以必须本地处理寻找每层的循环节,最外层最1000000007取模,则找到最外层的循环节是222222224,次外层对222222224取模,找到次外层循环节是183120。接下来利用这三个不...

sugarbliss 430

iSLIP算法实战:如何用Python模拟交换机优先级匹配(附完整代码)

本文详细介绍了如何使用Python实现iSLIP算法,模拟交换机优先级匹配过程。通过核心的指针滑动逻辑和迭代循环策略,构建了一个完整的iSLIP算法模拟器,并加入可视化模块以直观展示匹配过程。文章还提供了完整的代码框架和性能优化建议,适合网络工程师和Python开发者直接集成到测试环境中。

weixin_29313239的博客 251

蛋白质组学实战指南 | (八)从数据到洞见:差异蛋白筛选与功能解析全流程

本文系统阐述了蛋白质组学数据分析中,从原始数据质控到差异蛋白筛选与功能解析的全流程。重点介绍了数据质量评估、差异蛋白筛选的统计方法(包括多重检验校正)、功能注释与富集分析,以及蛋白互作网络构建与关键节点识别。最后,为如何将生物信息学洞见转化为实验验证提供了清晰的规划思路,助力研究者完成从数据到生物学知识的闭环。

weixin_29250573的博客 372

HDU - 4291 A Short problem (矩阵快速幂+找循环节)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4291 A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2845    Accepted Subm

Vision 377

SLAM 轨迹评估工具——EVO安装、使用介绍

evo是一款用于视觉里程计和SLAM问题的轨迹评估工具. 核心功能是能够绘制相机的轨迹, 或评估轨迹与真值之间的误差. 支持多种数据集的轨迹格式(TUM、KITTI、EuRoC MAV、ROS的bag), 同时支持这些数据格式之间的相互转换,本文轨迹展示以tum数据格式为例。

u010196944的博客 1万+

循环节+矩阵快速幂 HDU4291

循环节+矩阵快速幂 HDU4291

Vibrant 309

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU 4291 A Short problem // 矩阵快速幂, 循环节

题目描述HDU 4291 A Short problem解题思路题目大意:g(n)g(n) = 3g(n−1)g(n - 1) + g(n−2)g(n - 2) 其中, g(0)g(0) = 0, g(1)g(1) = 1求 g(g(g(n)))g(g(g(n))) mod 1000000007将递推关系变形为 : (g(n+1)g(n))\begin{pmatrix} g(n+1) \\

FZU_zyt的专栏_(:з」∠)_ 472

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

[矩阵快速幂+循环节]hdu4291

题意: Given n (1 <= n <= 1018), You should solve for g(g(g(n))) mod 109 + 7  where g(n) = 3g(n - 1) + g(n - 2) g(1) = 1 g(0) = 0 分析: 这个递推关系可以用矩阵快速幂来解决

zylm的专栏 1012

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

hdu4291 暴力循环节+矩阵快速幂

题意:       给你一个关系式,x[n] = 3*x[n-1] + x[n-2],求x(x(x[n]))% 1000000007. 思路:       做这个题目要明确一点,就是对于取余操作大多数时候都会出现循 环节的情况,尤其是对于像这个题目的转换公式,数据有规律递增,那么 也就是说0 1 1 ....等再次出现0 1的时候也就是一定找了循环节,对

天使也掉毛 678

hdu 4291 矩阵的快速幂(寻找循环节)

补充一个知识:摸运算肯定会出现的循环节的。那么循环嵌套,对内层求MOD,层层向外跳出。 现暴力求出循环节,然后用矩阵的快速幂。 构找矩阵的方法: 一般的对于线性递推方程fn=a1fn-1+a2fn-2+……+aifn-i 线性递推方程即形如 fn=a1fn-1+a2fn-2+……+aifn-i的方程 以斐波那契数列为例 an=an-1+an-2 我们的目的是通过矩阵乘法,求得斐波那

Weiguang_123的专栏 1980

hdu 4291 矩阵快速幂+找循环节

#include #include using namespace std; #define ll __int64 ll a[3]={183120,222222224,1000000007}; const int N=2; ll mod; struct matrix { ll mat[N][N]; }; matrix mul(matrix a,matrix b) { matrix

a709743744的博客 526

HDU 4291 A Short problem 矩阵快速幂 循环节

题解思路: 构造矩阵,矩阵乘法计算还是t; 需要找循环节;   (注意因为是复合函数,不可以在里面取mod) 暴力跑只有可以找到g(222222224)%1e9==g(0)%1e9; 所以 g(g(n)%222222224)%1e9==g(g(n)); 之后还可以跑出2个循环节 从内到外 240  183120 222222224 1e9+7 #include&lt;cstd...

Minun 162

HDU 4291 A Short problem(矩阵快速幂+循环节)

HDU 4291题意:计算:g(g(g(n)))mod109+7计算:g(g(g(n)))\mod 10^9 + 7 其中:g(n)=3g(n−1)+g(n−2),g(1)=1,g(0)=0其中:g(n) = 3g(n - 1) + g(n - 2),g(1) = 1,g(0) = 0思路:开始的想法是一层层的求出来,后来发现是错的。只有最外层能模除109+710^9 + 7. 这里有一个知识点

a novice 888

HDU 4291-A Short problem-循环节+矩阵快速幂

http://acm.hdu.edu.cn/showproblem.php?pid=4291  According to a research, VIM users tend to have shorter fingers, compared with Emacs users.    Hence they prefer problems short, too. Here is a short

缺氧 405

hdu 4291(矩阵快速幂 + 循环节)

题意:求s s = g(g(g(n))) mod 1000000007 其中g(n) g(n) = 3g(n - 1) + g(n - 2) g(1) = 1 g(0) = 0 题解:普通的矩阵快速幂会超时,看到别人的题解是需要计算循环节得到小的MOD从而减小计算量。1000000007太大,需要计算更小的一个循环节,新技能get。#include <stdio.h> #include

俯瞰风景 979

hdu 4291 矩阵快速幂+循环节

很简单的题目,将嵌套循环先找到三个循环节,然后快速幂。 ACcode: #include #include typedef long long LL; const int MOD1=183120; const int MOD2=222222224; const int MOD3=1e9+7; LL n; LL fun(LL mod) { LL a=0,b=1,c=-1;

丿Smilē 丶晨星灬 1095

hdu 4291(矩阵快速幂+循环节)

A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2487    Accepted Submission(s): 876 Problem Description   Accor

__小明003的博客 464

hdu 4291 A Short problem 矩阵快速幂,找循环节

这题和以往的矩阵快速幂的题目不同在于g(g(g(n))) mod 109 + 7; 这个取模 是把最外层的g( ) 函数的 因变量改了. g()函数是比斐波那契函数的增长速度还要快的. 所以最外层g( ) 的自变量 g(g(n)) 是非常大的. 所以考虑找循环节. 最外层的g()的因变量是要%1000000007的,而且g(0)=0,g(1)=1,所以可以通过下面的程序找到 g(g(n))的循环节是222222224. 所以第二层的g()的因变量是要%222222224;而且它同样有g(0)=0,g(

万事屋 875
上一篇: HDU 4288 && Codeforces 85D (线段树+离散化+离线处理)
下一篇: HDU 4294 Multiple (数论+bfs)
GentleH
博客等级 码龄15年 6粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值