Best Solver HDU - 5451(共轭构造+循环节+快速幂)

hdu3977 - fibonacci模p的周期 假设N(m)为模m的周期,则有 N(ab)=lcm(N(a),N(b)),其中gcd(a,b)=1; /*这里证明使用了fibo数的性质, N(p^k)=N(p)*p^(k-1),其中p为质数   /*论文里这个没有证明,但是验证了10^14内的都满足 对于质数p,其周期可以推算得出: 当p%5=1或4时,它是p-1的因子 当p%4=2或3时,它是2*(p-1)的因子 如果 阅读详情

Best Solver HDU - 5451

The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart.

It is known that y=(5+26–√)1+2x. y = ( 5 + 2 6 ) 1 + 2 x .
For a given integer x(0≤x<232) x ( 0 ≤ x < 2 3 2 ) and a given prime number M (M≤46337), print [y]%M. ([y] means the integer part of y
)
Input
An integer T (1<T≤1000) ( 1 < T ≤ 1000 ) , indicating there are T test cases.
Following are T lines, each containing two integers x and M
, as introduced above.
Output
The output contains exactly T lines.
Each line contains an integer representing [y]%M
.
Sample Input

7
0 46337
1 46337
3 46337
1 46337
21 46337
321 46337
4321 46337

Sample Output

Case #1: 97
Case #2: 969
Case #3: 16537
Case #4: 969
Case #5: 40453
Case #6: 10211
Case #7: 17947
题意:

求解 y=[(5+26–√)1+2x]%M,[]指取整数部分 y = [ ( 5 + 2 6 ) 1 + 2 x ] % M , [ ] 指 取 整 数 部 分

分析:

当我们看到带有根号的数的幂的时候,应该联想到斐波那契数列

因为斐波那契数列通项公式:

fn=15–√(1+5–√2)n−15–√(1−5–√2)n f n = 1 5 ( 1 + 5 2 ) n − 1 5 ( 1 − 5 2 ) n

递推式:
fn=fn−1+fn−2 f n = f n − 1 + f n − 2

因此我们应该想到需要构造类似于斐波那契数列通项公式这样的共轭式子来看能发现什么

我们构造

an=(5+26–√)n+(5−26–√)n a n = ( 5 + 2 6 ) n + ( 5 − 2 6 ) n

类比于斐波那契数列通项公式我们知道 an a n 必为整数,因为无理数在二项式展开后会相互消去

简单证明我们可以展开 an a n

an=Cin5i⋅(26–√)n−i+Cin5i⋅(−1)n−i⋅(26–√)n−i a n = C n i 5 i ⋅ ( 2 6 ) n − i + C n i 5 i ⋅ ( − 1 ) n − i ⋅ ( 2 6 ) n − i

当 n−i n − i 为偶数的时候 (26–√)n−i ( 2 6 ) n − i 变成整数, (−1)n−i=1 ( − 1 ) n − i = 1
当 n−i n − i 为奇数的时候 (−1)n−i=−1 ( − 1 ) n − i = − 1 和前面的恰好抵消

然后我们发现

0≤5−26–√≤1 0 ≤ 5 − 2 6 ≤ 1

而 an a n 是一个整数也就说明假设 (5+26–√)n=k.⋯,(5−26–√)n=0.⋯ ( 5 + 2 6 ) n = k . ⋯ , ( 5 − 2 6 ) n = 0. ⋯

an=k.⋯+0.⋯=k+1 a n = k . ⋯ + 0. ⋯ = k + 1

(小数部分互补,使得整数部分+1)

而我们要求得的答案实际上是 k k

因此我们得到答案

ans=an−1

所以我们只要求出数列 an a n 来即可

继续类比斐波那契数列的递推公式

我们可以知道 an a n 的递推式必定也为

an=p⋅an−1+q⋅an−2 a n = p ⋅ a n − 1 + q ⋅ a n − 2

的形式

所以我们可以手动求出前几项带入求解系数 p,q p , q

但我们也有更高级的计算方法,详细请看斐波那契数列通项公式推导及其类似构造共轭公式反求递推式

最终得到递推式

an=10⋅an−1−an−2 a n = 10 ⋅ a n − 1 − a n − 2

我们发现指数可能会非常大,但是题目却要求的取模。

所以我们再次对比斐波那契数列取模具有循环节的性质,这个数列取模也必含有循环节

所以对于每个给定的模数 M M 我们每次可以打表找出循环节r,然后求解系数 (1+2x)%r ( 1 + 2 x ) % r

就得到了在一个循环节中的位置,也就是得到了数列 an a n 的第几项

然后输出 an−1 a n − 1 取模即可

code:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long ll;
const int maxn = 47000;
ll x;
int m,r[maxn],a[maxn];
void init(){
    if(r[m] != -1)
        return;
    a[0] = 2 % m;
    a[1] = 10 % m;
    for(int i = 2;;i++){
        a[i] = (10 * a[i-1] - a[i-2] + m) % m;
        if(a[i-1] == a[0] && a[i] == a[1]){
            r[m] = i-1;
            break;
        }
    }
}
ll q_pow(ll b,ll mod){
    ll ans = 1LL;
    ll aa = 2LL;
    while(b){
        if(b & 1)
            ans = ans * aa % mod;
        b >>= 1;
        aa = aa * aa % mod;
    }
    return ans;
}
void solve(){
    int n,ans;
    n = (int)q_pow(x,(ll)r[m]);
    n = (n + 1) % r[m];
    a[0] = 2 % m;//注意这里需要再求一边,因为如果r[m]之前已经算过了,将不初始化a数组,所以里面的值是上一个模数下的值
    a[1] = 10 % m;
    for(int i = 2; i <= n; i++){
        a[i] = (10 * a[i-1] - a[i-2] + m) % m;
    }
    ans = (a[n] - 1 + m) % m;
    printf("%d\n",ans);
}
int main(){
    memset(r,-1,sizeof(r));
    int T,cas = 0;
    scanf("%d",&T);
    while(T--){
        scanf("%lld%d",&x,&m);
        init();
        printf("Case #%d: ",++cas);
        solve();
    }
    return 0;
}
菱Q系列串行通信模块QJ71C24N:概述与特点 该模块支持多种串行通信协议,包括RS-232、RS-422和RS-485等,并提供了可靠的数据传输和高效的通信性能。菱Q系列串行通信模块QJ71C24N是一款功能强大的模块,具有多种通信协议支持、高速数据传输、多点通信能力和简化配置与使用等特点。简化配置和使用:QJ71C24N模块具有简单易用的配置工具和用户界面,使得用户能够快速进行模块的设置和调整。高速数据传输:QJ71C24N模块提供了高速的数据传输能力,可实现快速的数据交换和通信。本文将介绍QJ71C24N模块的概述和特点,并提供相应的源代码示例。 阅读详情

相关推荐

实测|龙虾机器人(OpenClaw)Windows系统部署全攻略(含避坑指南)

先简单科普下:龙虾机器人本质是一款开源AI代理框架,核心优势是“能行动、可本地、高灵活”——它不内置大模型,需要对接第三方AI接口(如GPT、Claude、阿里云百炼等),但能将AI的指令转化为实际的系统操作,相当于给AI配了一个“能动手的身体”,这也是它和普通对话大模型的核心区别。今天就结合自己的实测经历,从环境准备、分步部署、初始化配置,到常见问题排查,写一篇保姆级攻略,不管是新手还是有一定技术基础的同学,都能跟着一步步完成部署,少走弯路~解决方案:检查聊天软件插件是否安装成功,权限是否配置完整;

wohaiweifaju的博客 1万+

HDU——3977 Evil teacher(求斐波那契数列循环节)

题意:求斐波那契数列模一个数的循环节的长度。其中模的那个数的最大值<=2e9 但是这个数的最大质因子<=1e6 题解:我这个菜鸡就把这个当成板子了,想研究的大佬请看https://blog.youkuaiyun.com/h6363817/article/details/11017111 上代码: #include <iostream> #include <cstdio&...

lgz0921的博客 351

用户消费行为分析(MapReduce实现,Hive分析)

一、题目要求 数据来自CDNow网站的一份用户购买CD明细,本数据集共有 6 万条 左右数据,数据为 CDNow 网站 1997年1月至1998年6月的用户行为 数据

紫烟的博客 3013

hdu 3977 循环节

传送门 题意: 求fib数列模p的最小循环节,素数一定是小于10^6。 和19年多校有一题非常相似 https://blog.youkuaiyun.com/henucm/article/details/102592695 思路: 求出斐波那契数列模各个素数幂的周期,所有周期的最小公倍数就是答案。 要想求出斐波那契数列模素数幂的周期,只需要求出模这个素数的周期。 根据素数的大小和上面的理论进行计算...

henucm的博客 500

Topas——基于Geant4的放射治疗蒙特卡罗算法模拟工具

本文内容参考Joseph Perl 的线上会议,视频详情可见于,该视频会议内容主要介绍Topas功能、软件架构、工作流程、参数设定、物理模型、具体案例等,对TOPAS的基本入门使用方法以及使用规定作出阐述。

fy方的博客 7601

Vivado静态时序分析学习笔记(1)

静态时序分析分为片内时序分析(寄存器与寄存器之间的时序关系)和片外时序分析(IO时序分析)。(1)建立时间 setup time在时钟事件(上升沿/下降沿)发生之前数据信号应保持稳定的时间。把实际电路抽象成前级D触发器+组合逻辑+后级D触发器。

Fantaasky的博客 4375

构造,循环节

大致题意:在长度为n的数组里插入一些数,让他每k个数只和都相等。 思路:最后的数列一定是a,b,c,d ,a,b,c,d。。它是拥有循环节的,可以把存在的数放到set里,如果set比k还大,就无法构造循环节了,我们可以构造n个循环节,每个循环节里面如果set个数比k小可以用1来代替。 代码: #include<iostream> #include<cstring> #include<set> using namespace std; set<int>s; i.

goto_1600的博客 363

STM32-printf重定向串口输出

声明 本文内容转载至https://www.mculover666.cn/posts/2251182441/ 1.printf与fputc printf 定义在 <stdio.h> 头文件中,如下: int printf(const char *format, ...); printf 函数根据 format 字符串给出的格式打印输出到 stdout(标准输出)中,当然,printf 函数是不会一个字符一个字符去输出,它会调用更底层的 I/O 函数:fputc去逐个字符打印。 fputc 也定

qq_41215167的博客 4539

hdu5451(循环群,矩阵快速幂)

先看简单点的。求 (5+2*√(6))^n % 1024 第一种构造: 原文:https://blog.youkuaiyun.com/xtulollipop/article/details/52382791    第二种: 令 An = (5 + 2√6)^n,Bn = (5 - 2√6)^n Sn = An + Bn; 显然Sn是正整数,且Bn是小于1的 所以答案就是Sn - 1!  (5 ...

叶子心情你不懂 655

UE5垃圾回收优化实战:定位GC卡顿与内存泄漏

垃圾回收(GC)是Unreal Engine 5中保障UObject内存安全的核心机制,其基于引用图的标记-清除原理决定了性能高度依赖引用结构合理性。当GC频繁触发或单次耗时突增,往往映射出蓝图强引用冗余、C++根对象管理失控或资源生命周期设计缺陷等底层问题。技术价值在于降低主线程阻塞、稳定60帧体验、抑制内存异常增长;典型应用场景包括关卡切换卡顿、UI打开后持续GC、打包后内存不释放等。本文聚焦UE5特有的Full GC模式、UObject生命周期约束及GC触发时机不可见性,提供从蓝图变量规范、TSoft

weixin_31995251的博客 362

C++和OpenGL实现3D游戏编程【连载6】——不规则图形的纹理贴图(附源码)

上一节我们讨论了纹理贴图的相关基础操作,但上一节的纹理贴图操作基本上都是规则图形,包括圆形和球形虽然复杂一点,但是它也是规则的。这一节课我们要讨论一下,怎么在不规则图形上纹理贴图,就比如文章下图的心形纹理贴图,以及纹理的平移、旋转、放大缩小功能。

zhooyu的博客 1307

hdu 5451 Best Solver -广义斐波那契+矩阵快速幂+共轭构造+循环节

http://acm.hdu.edu.cn/showproblem.php?pid=5451 方法类似http://blog.youkuaiyun.com/viphong/article/details/52980972 只不过此题指定了a=5,b=24 首先根据http://blog.youkuaiyun.com/viphong/article/details/52980972 中的方法,构造 Cn=An+B

缺氧 510

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

HDU 5451 Best Solver(矩阵快速幂+ 共轭复数 + 循环节 数论)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5451 Problem Description The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart. It is known thaty=(5+2...

1651

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Best Solver HDU - 5451 (共轭构造)

The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart. It is known thaty=(5+26–√)1+2xy=(5+26)1+2x. For a given integerx(0≤x<232)x(0≤x<232)and ...

蒟蒻小胖 227

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU 5451- Best Solver (数论)

http://acm.hdu.edu.cn/showproblem.php?pid=5451   共轭知识: 设C(n)=(a+sqrt(b))^n 当a^2&lt;b的时候有: C(n+1)=2*a*C(n)-(a*a-b)*C(n-1). C(n)是(a+sqrt(b))^n 向上取整形式。 这题是向下取整。减1就行了。 有了递推公式,只要求循环节就行了。因为mod很小。   ...

Mr_Treeeee的博客 294

hdu 5451 Best Solver(循环节+共轭构造)

http://acm.hdu.edu.cn/showproblem.php?pid=5451   如果指数不是那么大的话,就和那个SO EAST那道题一样的用矩阵快速幂来做 但是指数是2的2的31次方那么大,底数还是个无理数, 降幂不能 看了别人的优秀代码 ,发现是寻找循环节.因为模数很小. 对于每一个模数,都有自己的循环节. 向上取整的递推公式是 Cn=10*Cn-1 -Cn-2  ...

三水的鱼塘♂ 374

2015 ACM/ICPC Asia Regional Shenyang Online & HDU 5451 Best Solver【循环节+数论||共轭矩阵幂+广义斐波那契降幂】

http://acm.hdu.edu.cn/showproblem.php?pid=5451 通过一道名为So easy!的共轭构造矩阵幂取模的问题来联想到这个题,不难发现应该用同样的套路来进行共轭构造。 但是问题来了,指数过分强大,取模数超小,于是一开始考虑欧拉降幂再矩阵快速幂。数据一大,发现答案全错!后请教得知无理数无法欧拉降幂。 那么就只有一种可能了——有规律可循! 找循环节,其实欧...

Irish_Moonshine的博客 486

hdu 5451 Best Solver(快速幂找循环节)

题目 思路:因为(5-sqrt(24))和(5+sqrt(24))是共轭复数,所以(5-sqrt(24))^n+(5+sqrt(24))^n一定是整数,然后因为(5-sqrt(24))&lt;1,所以这个求出来的就是(5+sqrt(24))^n的向上取整的值,向下取整只需这个求出来减一即可,我们用cn表示(5-sqrt(24))^n+(5+sqrt(24))^n,cn*((5-sqrt(24))...

Oops的博客 187

hdu 5451 Best Solver 快速矩阵乘法 Fibonacci数列的循环节

Best Solver Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others) Total Submission(s): 401    Accepted Submission(s): 212 Problem Description The so-called best

G.D.Retop的专栏 1653

hdu 5451 Best Solver(矩阵乘法+数论)

题目链接:hdu 5451 Best Solver解题思路因为取模的数很小,所以暴力找打循环节,然后求解。代码#include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <set> #include <algorithm>using namespace std; const int maxn = 4

不慌不忙、不急不躁 1081

HDU 5451 Best Solver

Problem Description The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart. It is known that y=(5+26√)1+2x. For a given integer x (0≤x232) and a gi

Occult 989

hdu5451Best Solver=矩阵快速幂+广义斐波拉契

Problem Description The so-called best problem solver can easily solve this problem, with his/her childhood sweetheart.It is known that y=(5+26√)1+2x.y=(5+2\sqrt6)^{1+2^x}. For a given integer x (0≤x

xtulollipop 533

hdu 5451 Best Solver(2015沈阳赛区网赛)

Best Solver                                                       Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)

ACway的专栏 6407

循环节 - 【数论】

循环节 引言: 小学的规律题大家不陌生吧,经常跟取余数挂钩的那种,其实挺简单的。比如给你一个序列1 3 5 7 9 1 3 5 7 9 1 3 …这就是小学题目嘛,对吧看着好简单。 循环节: 其实现在很多题目也要用到同样的方法,打表找出循环节点,然后再去处理它。这类题目往往有些特点,数据大,结果取模。 例题: All X:hdu 5690 Problem Description F(x,m) 代表...

tran_sient的博客 5668

【HDU】5451 Best Solver(2015 ACM/ICPC Shenyang Online)

Best Solver题目链接 Best Solver 题目大意    求该式的整数部分mod m的值: y=(5+26√)1+2x y=(5+2\sqrt6)^{1+2^x} 题解    构造如下式子: fn=(5+26√)n+(5−26√)n f_n=(5+2\sqrt6)^{n}+(5-2\sqrt6)^{n}     可见fn为整数,又因为等式后面的一项小于1,所以y的整数部分就是f

S_Black的专栏 619

HDU 5451 数论

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5451 本题与HDU 4565类似,构造一个类似fibo的递推式,然后用矩阵快速幂求得需要的那一项,由于此题幂次比较高,我们可以通过寻找循环节——(mod + 1) * (mod - 1)来实现降幂。 据出题人的意思来说,还有一个较大的循环节推法,(p^2- p)(p^2-1)p​2​​−p)(p​

纳兰 597
上一篇: Jesus Is Here HDU - 5459(思维+数学递推)
下一篇: 斐波那契数列通项公式推导及其类似构造共轭公式反求递推式
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值