Problem

传送门

Sol

容易得到

\[f_n=e_{n-1}+f_{n-1},e_{n-1}=f_{n-1}+e_{n-1},f_1=e_1=1
\]

那么

\[f_n=2\times \sum_{i=1}^{n-1}f_i-f_{n-1}+1
\]

又有

\[f_{n+1}=2\times \sum_{i=1}^{n}f_i-f_{n}+1
\]

相减得到 \(f_{n+1}=f_n\times 2 + f_{n-1},f_1=1\)

有结论 \(gcd(a,b)=1\) 时,形如 \(f_i=af_{i-1}+bf_{i-2}\) 的数列有性质 \(gcd(f_i,f_j)=f_{gcd(i,j)}\)

大概可以这么证明

而 \(lcm\) 实际上是一个对于质因子的指数取 \(max\) 的操作

每个质因子分开考虑,然后最值反演

\[lcm(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)=\prod_{T \subset S}gcd(T)^{(-1)^{|T|+1}}
\]

其中 \(S,T\ne \phi\),\(min(T_i)\) 表示 \(p_i\) 这个因子的指数最小值

所以

\[g_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}}
\]

设 $$s_d=\sum_{T\subset S}gcd(T)==d^{|T|+1}$$

\[h_i=\sum_{i|d}^{n}s_d=\sum_{T\subset S}[i|gcd(T)](-1)^{|T|+1}=[cnt_i\ne 0]=1
\]

其中 \(cnt_i\) 表示 \(i\) 的倍数的个数

那么

\[s_i=\sum_{i|d}^{n}\mu(\frac{d}{i})h_d=\sum_{i|d}^{n}\mu(\frac{d}{i})
\]

那么

\[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})}
\]

\(\Theta(nlog n)\) 预处理出 \(\prod_{d|i}f_d^{\mu(\frac{i}{d})}\) 即可

# 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月赛]最小公倍佩尔数(min-max容斥&莫比乌斯反演)(线性多项式多个数求LCM)

    4833: [Lydsy1704月赛]最小公倍佩尔数 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 240  Solved: 118[Submit][S ...

  2. [Lydsy1704月赛] 最小公倍佩尔数

    4833: [Lydsy1704月赛]最小公倍佩尔数 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 202  Solved: 99[Submit][St ...

  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. 【BZOJ4833】最小公倍佩尔数(min-max容斥)

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

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

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

  7. bzoj 4836 [Lydsy1704月赛]二元运算 分治FFT+生成函数

    [Lydsy1704月赛]二元运算 Time Limit: 8 Sec  Memory Limit: 128 MBSubmit: 577  Solved: 201[Submit][Status][Di ...

  8. BZOJ4831: [Lydsy1704月赛]序列操作(非常nice的DP& 贪心)

    4831: [Lydsy1704月赛]序列操作 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 250  Solved: 93[Submit][Statu ...

  9. bzoj 4831 [Lydsy1704月赛]序列操作 dp

    [Lydsy1704月赛]序列操作 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 203  Solved: 69[Submit][Status][Dis ...

随机推荐

  1. 总结day5 ---- ,字典的学习,增删改查,以及字典的嵌套, 赋值运算

    内容大纲: 一:字典的定义 二:字典的增加 >1:按照key增加,  无则增加,有则覆盖 >2:setdefault()  ,无则增加,有则不变 三:字典的删除 >1:pop()  ...

  2. 初识gulp

    之前一段时间学习使用了gulp自动化构建工具,并在现在使用的项目上部署使用,同时在这做个笔记进行小结,以便加深记忆,如有理解错误的地方请不吝赐教 gulp 的解释我就不多说了 这里引用官网的一句话   ...

  3. Springboot接口简单实现生成MySQL插入语句

    Springboot接口简单实现调用接口生成MySQL插入语句 在实际测试中,有这样一个需求场景,比如:在性能压力测试中,可能需要我们事先插入数据库中一些相关联的数据. 我们在实际测试中,遇到问题,需 ...

  4. asp.net图片上传代码

    前端: <form action="/ImageUpload.ashx" method="post" enctype="multipart/fo ...

  5. Web服务器与浏览器的实现原理

    Web服务器与浏览器的实现原理 第一部分 为什么会出现web程序? 单机程序不能共享功能的特性导致了客户机服务器模式的诞生  有一台服务器有特定功能的程序 其他计算机通过客户端程序与服务器交流间接使用 ...

  6. 判断IE浏览器的版本号

    function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgen ...

  7. OpenERP 干掉 产品计量单位中的 search more 和 create and edit

    实际操作中特别容易点错而新建了重复的单位,通过下边的方法可以将“search more”和 “create and edit”干掉 在新继承product.product的模块中,修改xml文件 这样 ...

  8. (转)OpenStack —— 原理架构介绍(一、二)

    原文:http://blog.51cto.com/wzlinux/1961337 http://blog.51cto.com/wzlinux/category18.html-------------O ...

  9. 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字

    我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...

  10. django notes 七:Using Forms

    form 也没什么可说的,我只给一个例子大家就懂了 form model from django import forms class UserForm(forms.Form): username = ...