BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数
Problem
传送门
Sol
容易得到
fn=en−1+fn−1,en−1=fn−1+en−1,f1=e1=1f_n=e_{n-1}+f_{n-1},e_{n-1}=f_{n-1}+e_{n-1},f_1=e_1=1fn=en−1+fn−1,en−1=fn−1+en−1,f1=e1=1
那么
fn=2×∑i=1n−1fi−fn−1+1f_n=2\times \sum_{i=1}^{n-1}f_i-f_{n-1}+1fn=2×i=1∑n−1fi−fn−1+1
又有
fn+1=2×∑i=1nfi−fn+1f_{n+1}=2\times \sum_{i=1}^{n}f_i-f_{n}+1fn+1=2×i=1∑nfi−fn+1
相减得到 fn+1=fn×2+fn−1,f1=1f_{n+1}=f_n\times 2 + f_{n-1},f_1=1fn+1=fn×2+fn−1,f1=1
有结论 gcd(a,b)=1gcd(a,b)=1gcd(a,b)=1 时,形如 fi=afi−1+bfi−2f_i=af_{i-1}+bf_{i-2}fi=afi−1+bfi−2 的数列有性质 gcd(fi,fj)=fgcd(i,j)gcd(f_i,f_j)=f_{gcd(i,j)}gcd(fi,fj)=fgcd(i,j)
大概可以这么证明
而 lcmlcmlcm 实际上是一个对于质因子的指数取 maxmaxmax 的操作
每个质因子分开考虑,然后最值反演
lcm(S)=∏ipi∑T⊂Smin(Ti)(−1)∣T∣+1=∏i∏T⊂Spimin(Ti)(−1)∣T∣+1lcm(S)=\prod_{i}p_i^{\sum_{T\subset S}min(T_i)(-1)^{|T|+1}}=\prod_{i}\prod_{T\subset S}p_i^{min(T_i)(-1)^{|T|+1}}lcm(S)=i∏pi∑T⊂Smin(Ti)(−1)∣T∣+1=i∏T⊂S∏pimin(Ti)(−1)∣T∣+1
交换顺序得到
lcm(S)=∏T⊂Sgcd(T)(−1)∣T∣+1lcm(S)=\prod_{T \subset S}gcd(T)^{(-1)^{|T|+1}}lcm(S)=T⊂S∏gcd(T)(−1)∣T∣+1
其中 S,T≠∅S,T\ne \emptyS,T̸=∅,min(Ti)min(T_i)min(Ti) 表示 pip_ipi 这个因子的指数最小值
所以
gn=∏T⊂Sfgcd(T)(−1)∣T∣+1=∏d=1nfd∑T⊂S[gcd(T)==d](−1)∣T∣+1g_n=\prod_{T \subset S}f_{gcd(T)}^{(-1)^{|T|+1}}=\prod_{d=1}^{n}f_{d}^{\sum_{T\subset S}[gcd(T)==d](-1)^{|T|+1}}gn=T⊂S∏fgcd(T)(−1)∣T∣+1=d=1∏nfd∑T⊂S[gcd(T)==d](−1)∣T∣+1
设 sd=∑T⊂S[gcd(T)==d](−1)∣T∣+1s_d=\sum_{T\subset S}[gcd(T)==d](-1)^{|T|+1}sd=T⊂S∑[gcd(T)==d](−1)∣T∣+1
hi=∑i∣dnsd=∑T⊂S[i∣gcd(T)](−1)∣T∣+1=[cnti≠0]=1h_i=\sum_{i|d}^{n}s_d=\sum_{T\subset S}[i|gcd(T)](-1)^{|T|+1}=[cnt_i\ne 0]=1hi=i∣d∑nsd=T⊂S∑[i∣gcd(T)](−1)∣T∣+1=[cnti̸=0]=1
其中 cnticnt_icnti 表示 iii 的倍数的个数
那么
si=∑i∣dnμ(di)hd=∑i∣dnμ(di)s_i=\sum_{i|d}^{n}\mu(\frac{d}{i})h_d=\sum_{i|d}^{n}\mu(\frac{d}{i})si=i∣d∑nμ(id)hd=i∣d∑nμ(id)
那么
gn=∏d=1nfd∑d∣inμ(id)=∏d=1n∏d∣infdμ(id)=∏i=1n∏d∣ifdμ(id)g_n=\prod_{d=1}^{n}f_{d}^{\sum_{d|i}^{n}\mu(\frac{i}{d})}=\prod_{d=1}^{n}\prod_{d|i}^{n}f_d^{\mu(\frac{i}{d})}=\prod_{i=1}^{n}\prod_{d|i}f_d^{\mu(\frac{i}{d})}gn=d=1∏nfd∑d∣inμ(di)=d=1∏nd∣i∏nfdμ(di)=i=1∏nd∣i∏fdμ(di)
Θ(nlogn)\Theta(nlog n)Θ(nlogn) 预处理出 ∏d∣ifdμ(id)\prod_{d|i}f_d^{\mu(\frac{i}{d})}∏d∣ifdμ(di) 即可
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;const int maxn(1e6 + 5);int pr[maxn], num, ispr[maxn], mu[maxn], n, f[maxn], s[maxn], g[maxn], mod, ans, inv[maxn];inline int Pow(ll x, int y) {register ll ret = 1;for (; y; y >>= 1, x = x * x % mod)if (y & 1) ret = ret * x % mod;return ret;
}inline void Inc(int &x, int y) {if ((x += y) >= mod) x -= mod;
}int main() {register int i, j, test;mu[1] = 1, ispr[1] = 1;for (i = 2; i <= 1000000; ++i) {if (!ispr[i]) pr[++num] = i, mu[i] = -1;for (j = 1; j <= num && i * pr[j] <= 1000000; ++j) {ispr[i * pr[j]] = 1;if (i % pr[j]) mu[i * pr[j]] = -mu[i];else {mu[i * pr[j]] = 0;break;}}}mod = 1e9 + 7;for (scanf("%d", &test); test; --test) {scanf("%d%d", &n, &mod), ans = 0;for (f[1] = 1, i = 2; i <= n; ++i) f[i] = (2LL * f[i - 1] + f[i - 2]) % mod;for (g[0] = i = 1; i <= n; ++i) g[i] = 0, s[i] = 1, inv[i] = Pow(f[i], mod - 2);for (i = 1; i <= n; ++i)for (j = i; j <= n; j += i)if (mu[j / i] == 1) s[j] = 1LL * s[j] * f[i] % mod;else if (mu[j / i] == -1) s[j] = 1LL * s[j] * inv[i] % mod;for (i = 1; i <= n; ++i) g[i] = 1LL * g[i - 1] * s[i] % mod;for (i = 1; i <= n; ++i) Inc(ans, 1LL * i * g[i] % mod);printf("%d\n", ans);}return 0;
}
BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数相关推荐
- BZOJ4833: [Lydsy1704月赛]最小公倍佩尔数-数论
传送门 题意: 令(1+2–√)n=e(n)+f(n)∗2–√(1+2)n=e(n)+f(n)∗2(1+\sqrt2)^n=e(n)+f(n)*\sqrt2,其中e(n),f(n)e(n),f(n)e ...
- BZOJ4833 [Lydsy1704月赛]最小公倍佩尔数
题意 已知\(e_n+\sqrt2f_n=(1+\sqrt2)^n\),\(e_n-\sqrt2f_n=(1-\sqrt2)^n\),\(g_n=lcm_{i=1}^nf_i\),求\(\sum_{i ...
- BZOJ 4833: [Lydsy1704月赛]最小公倍佩尔数(数论 + 最值反演)
题面 令 \({(1+\sqrt 2)}^n=e(n)+f(n)*\sqrt2\) ,其中 \(e(n),f(n)\) 都是整数,显然有 \({(1-\sqrt 2)}^n=e(n)-f(n)*\sq ...
- 【bzoj 4833】[Lydsy1704月赛]最小公倍佩尔数
Description 令 $(1+\sqrt 2)^n=e(n)+\sqrt 2\cdot f(n)$ ,其中 $e(n),f(n)$ 都是整数,显然有 $(1-\sqrt 2)^n=e(n)-\s ...
- bzoj 4833: [Lydsy1704月赛]最小公倍佩尔数
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4833 推推式子,可以得到f(n)=2*f(n-1)+f(n-2) 然后就可以按照这个来做了 ...
- 【BZOJ4833】最小公倍佩尔数(min-max容斥)
[BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...
- [bzoj4833][数论][min-max容斥]最小公倍佩尔数
Description 令(1+sqrt(2))n=e(n)+f(n)*sqrt(2),其中e(n),f(n)都是整数,显然有(1-sqrt(2))n=e(n)-f(n)*sqrt(2).令g( n) ...
- [bzoj 4833]最小公倍佩尔数
传送门 Description Let \((1+\sqrt2)^n=e(n)+f(n)\cdot\sqrt2\) , both \(e(n)\) and \(f(n)\) are integers ...
- [数论 反演] BZOJ 4833 最小公倍佩尔数
当时比赛时灵机一动 把gigi−1g_i\over g_{i-1}喂给了OEIS 然后就找到了 233 就是这个咯 然后就水过去了 题解?题解我还没看 先挖个坑 UPD:跟这个题是一毛一样的咯 #in ...
最新文章
- MySQL ORDER BY的使用
- 快给你的app上锁吧(android图案解锁)
- php文件安全实现方法,php安全下载大文件的实现代码
- 国产毫米波雷达领域的领头羊,木牛科技将在明年量产77GHz汽车雷达
- C++ concurrency::task实现异步编程(Windows)
- 南大计算机系尹一通,南京大学计算机科学与技术系导师教师师资介绍简介-尹一通(博导)...
- [Troubleshooting]-Outlook预定Lync预定会议显示乱码与残留号码
- 暑假练习:uva12563(01背包问题)
- 【Windows编程】系列第六篇:创建Toolbar与Statusbar
- 怎么用计算机同步文件夹,DSynchronize同步电脑本地文件夹教程
- css三大样式(行内样式)
- Novell NetWare 及其协议
- 新开发的微信小程序怎样推广引流?
- 乐优商城之后台管理系统
- 170713 逆向-填数游戏
- 学习opencv:PS滤镜—曝光过度
- 大脑神经网络图高清,大脑神经网络图片
- ‘’和“”区别和使用
- Vultr云主机+Godaddy域名+阿里SSL配置Nginx的https访问(包含docker配置方法)
- WKT Geometry
热门文章
- 【MobaXterm教程】【公网】利用ipv6远程访问服务器
- Day11 - Ruby的block,proc,lamdba方法比较
- 2004胡润IT富豪榜
- word文档怎么调成黑底白字
- web前端-html-css-字体的分类(serif衬线、sans-serif非衬线、monospace等宽、cursive草书、fantasy虚幻)
- 光遇测试服怎么显示服务器错误,光遇服务器错误怎么办_光遇服务器错误解决方法_3DM手游...
- 计算机的发展史与应用,计算机发展史`分类和应用领域
- 网页黑夜模式白天模式切换 html+css+js
- cml sml区别_CML与SML有何联系和区别?
- JAVA incept_(jsp+servlet)ERP管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国