当前位置: 首页 > news >正文

P3543 POI 2012 WYR-Leveling Ground Sol

题目链接

问题转化

问题不妨转化为 \(a \cdot f_{n-1} + b \cdot f_n \equiv 0 \pmod m\),要求找到最小的 \(n\) 满足这个条件。

不妨令 \(b = -b\),则有 \(a \cdot f_{n-1} \equiv b \cdot f_n \pmod m\)

我们希望让 \(a,b,n\) 能够独立,也就是 \(a,b\) 在同一侧, \(f_n,f_{n-1}\) 在另一侧。

第一次变化

根据 \(a \equiv b \pmod m\) 等价于 \(a/d \equiv b/d \pmod {m/d}\),我们不妨令 \(g = gcd(a,b,m)\),则有 \(a' \cdot f_{n-1} \equiv b' \cdot f_n \pmod {m'}\)。(其中 \(a'=a/g,b'=b/g,m'=m/g\))。

第二次变化

此时 \(gcd(a',m')\)\(gcd(b',m')\) 都可能大于 1,也就还不能使用逆元。但是在此时,我们有 \(gcd(a',m) = gcd(f_n,m') = p\)\(gcd(b',m')=gcd(f_{n-1},m') = q\)

因此,式子变成了 \(\frac{a'/p}{b'/q} \equiv \frac{f_n/p}{f_{n-1}/q} \pmod{\frac{m'}{pq}}\)。我们只需要对于每一个 \(m'\),预处理出 \(p,q,\frac{f_n/p}{f_{n-1}/q}\) 对应的答案就好了。

上面的发现可能很难注意到,这里给出证明。

我们先让 \(p = gcd(a',m')\)\(g = gcd(f_n,m')\)

根据 \(a \equiv b \pmod m\)\(d \mid m\) 时有 \(a \equiv b \pmod d\) 这一式子,我们有 \(a' \cdot f_{n-1}\equiv b' \cdot 0 \equiv 0 \pmod {g}\)。又因为 \(f_n\)\(f_{n-1}\) 互质,因此只能 \(g \mid a'\)。又因为 \(g \mid m'\),因此有 \(g \mid gcd(a',m')\),即 \(g \mid p\)

同样的,我们有 \(0 \cdot f_{n-1} \equiv b' \cdot f_n \pmod {p}\),又因为 \(gcd(b,p)=0\),因此有 \(p \mid f_n\)。结合 \(p \mid m'\),有 \(p \mid gcd(f_n,m')\)。也就有了 \(p \mid g\)

因为 \(p \mid g\)\(g \mid p\),有 \(p = g\),证毕。

时间复杂度证明

根据结论,有斐波那契数列的循环节是 \(O(m)\) 级别的,因此预处理时间复杂度是 \(O(\sum\limits_{x \mid m} x \log m)\)。单次查询是 \(\log m\) 的。

Code

这里需要注意特判 \(a = 0\)\(b=0\) 的情况。并且求逆元不要用费马小定理,要用扩展欧几里得。

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define File(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout)
#define LL long long
#define fi first
#define se second
const int N = 1e5 + 10;
int n,m;
map< pair<int, pair<int,int> > , int>  mp[N];
void exgcd(LL a,LL b,LL &x,LL &y){if(b == 0){x = 1,y = 0;return ;}exgcd(b,a%b,y,x);y = y - a / b * x;
}
LL inv(LL a,LL b){LL x,y;exgcd(a,b,x,y);return (x + b) % b;
}
int gcd(int a,int b){if(b == 0)return a;return gcd(b,a%b);
}
void init(){for(int i=2;i<=m;i++){if(m % i == 0){int x = 0,y = 1;for(int j=1;;j++){if(x && y){int p = gcd(y,i),q = gcd(x,i);int m$ = i / p / q;int k = (y / p) * inv(x / q,m$) % m$;if(!mp[i].count({k,{q,p}})) mp[i][{k,{q,p}}] = j; }int tmpx = x,tmpy = y;x = tmpy;y = (tmpx + tmpy) % i;if(x == 0 && y == 1) break;}}}return ;
}
int main(){IOS;cin >> n >> m;init();for(int i=1;i<=n;i++){int a,b;cin >> a >> b;b = (m - b) % m;if(a == 0){cout << 0 << "\n";continue;}if(b == 0){cout << 1 << '\n';continue;}int g = gcd(gcd(a,b),m);int m$ = m / g;a /= g;b /= g;int p = gcd(a,m$),q = gcd(b,m$);int m$$ = m$ / p / q;int k = (a / p) * inv(b / q,m$$) % m$$;if(mp[m$].count({k,{q,p}}))cout << mp[m$][{k,{q,p}}] << "\n";elsecout << -1 << "\n";}return 0;
}
http://www.jsqmd.com/news/850772/

相关文章:

  • 5分钟打造专属AI歌手:Retrieval-based-Voice-Conversion-WebUI语音克隆完整指南
  • 2026白山市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 2026 郑州装修公司口碑 TOP5 权威榜单(附核心优势与避坑指南) - 速递信息
  • 采购高低温交变试验箱前必看:如何判断厂家的综合实力? - 品牌推荐大师1
  • 保姆级教程:用国内镜像源5分钟搞定Spacy和en_core_web_lg模型下载安装
  • 别再死记硬背公式了!用Python和PyTorch手把手拆解Diffusion Model的前向加噪与反向去噪
  • 2026毕节市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 2026霸州市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 长期使用Taotoken的Token Plan套餐带来的月度成本节省感受
  • 从MIT-BIH到CPSC-2018:手把手教你用Python预处理不同格式的ECG公开数据
  • 五金冲压件厂家技术甄别:从工艺到交付的硬核参考 - 奔跑123
  • 【审计专栏-监督监管】【信息科学与工程学】计算机科学与自动化——第一百五十篇 招投标领域中的应用数学05
  • 做Java的都在看!Erupt 让老系统 AI 改造省到离谱
  • iOS照片去背景怎么操作?2026苹果手机去背景方法实测
  • 2026阿里市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 从磁铁到代码:用ST电机库5.4.4手把手实现你的第一个FOC电机驱动
  • 广东自建房封窗品牌排行 实测性能与场景适配对比 - 奔跑123
  • 上海婚纱照工作室怎么选?到店看这几个地方就够了 - eee888
  • 职业院校投智慧校园,到底划不划算?算笔明白账
  • 【今日复盘】2026年5月19日
  • 若依(Ruoyi)项目实战:5分钟搞定导航栏消息铃铛(轮询版,含内存泄漏避坑)
  • 5分钟极速汉化:Android Studio中文语言包的零门槛安装方案
  • 沈阳大润发购物卡回收指南 - 购物卡回收找京尔回收
  • 终于把workbuddy培养出DeepSeek V4Pro了
  • 2026滨州市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 深入OPTEE密钥链:从HUK到FEK,一次搞懂安全存储的加密层级与密钥派生
  • 2026年武汉阳台改造评测:8大品质品牌实力对比 - 优家闲谈
  • 28亿美元!被字节逼到无路可走的喜马拉雅终于卖给了腾讯
  • IPXWrapper:在Windows 11上玩转经典游戏的终极指南
  • CANopen设备配置不求人:手把手教你用EDS/DCF文件玩转对象字典