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−1​fi​−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∑n​fi​−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⊂S​min(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∏n​fd∑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∑n​sd​=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∏n​fd∑d∣in​μ(di​)​=d=1∏n​d∣i∏n​fdμ(di​)​=i=1∏n​d∣i∏​fdμ(di​)​
Θ(nlogn)\Theta(nlog n)Θ(nlogn) 预处理出 ∏d∣ifdμ(id)\prod_{d|i}f_d^{\mu(\frac{i}{d})}∏d∣i​fdμ(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月赛]最小公倍佩尔数相关推荐

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 【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 ...

  5. bzoj 4833: [Lydsy1704月赛]最小公倍佩尔数

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4833 推推式子,可以得到f(n)=2*f(n-1)+f(n-2) 然后就可以按照这个来做了 ...

  6. 【BZOJ4833】最小公倍佩尔数(min-max容斥)

    [BZOJ4833]最小公倍佩尔数(min-max容斥) 题面 BZOJ 题解 首先考虑怎么求\(f(n)\),考虑递推这个东西 \((1+\sqrt 2)(e(n-1)+f(n-1)\sqrt 2) ...

  7. [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) ...

  8. [bzoj 4833]最小公倍佩尔数

    传送门 Description Let \((1+\sqrt2)^n=e(n)+f(n)\cdot\sqrt2\) , both \(e(n)\) and \(f(n)\) are integers ...

  9. [数论 反演] BZOJ 4833 最小公倍佩尔数

    当时比赛时灵机一动 把gigi−1g_i\over g_{i-1}喂给了OEIS 然后就找到了 233 就是这个咯 然后就水过去了 题解?题解我还没看 先挖个坑 UPD:跟这个题是一毛一样的咯 #in ...

最新文章

  1. MySQL ORDER BY的使用
  2. 快给你的app上锁吧(android图案解锁)
  3. php文件安全实现方法,php安全下载大文件的实现代码
  4. 国产毫米波雷达领域的领头羊,木牛科技将在明年量产77GHz汽车雷达
  5. C++ concurrency::task实现异步编程(Windows)
  6. 南大计算机系尹一通,南京大学计算机科学与技术系导师教师师资介绍简介-尹一通(博导)...
  7. [Troubleshooting]-Outlook预定Lync预定会议显示乱码与残留号码
  8. 暑假练习:uva12563(01背包问题)
  9. 【Windows编程】系列第六篇:创建Toolbar与Statusbar
  10. 怎么用计算机同步文件夹,DSynchronize同步电脑本地文件夹教程
  11. css三大样式(行内样式)
  12. Novell NetWare 及其协议
  13. 新开发的微信小程序怎样推广引流?
  14. 乐优商城之后台管理系统
  15. 170713 逆向-填数游戏
  16. 学习opencv:PS滤镜—曝光过度
  17. 大脑神经网络图高清,大脑神经网络图片
  18. ‘’和“”区别和使用
  19. Vultr云主机+Godaddy域名+阿里SSL配置Nginx的https访问(包含docker配置方法)
  20. WKT Geometry

热门文章

  1. 【MobaXterm教程】【公网】利用ipv6远程访问服务器
  2. Day11 - Ruby的block,proc,lamdba方法比较
  3. 2004胡润IT富豪榜
  4. word文档怎么调成黑底白字
  5. web前端-html-css-字体的分类(serif衬线、sans-serif非衬线、monospace等宽、cursive草书、fantasy虚幻)
  6. 光遇测试服怎么显示服务器错误,光遇服务器错误怎么办_光遇服务器错误解决方法_3DM手游...
  7. 计算机的发展史与应用,计算机发展史`分类和应用领域
  8. 网页黑夜模式白天模式切换 html+css+js
  9. cml sml区别_CML与SML有何联系和区别?
  10. JAVA incept_(jsp+servlet)ERP管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国