51nod 1355 - 斐波那契的最小公倍数(Min-Max 容斥+莫比乌斯反演)
首先我们知道斐波那契数列的 lcm 是不太容易计算的,但是它们的 gcd 非常容易计算——\(\gcd(f_x,f_y)=f_{\gcd(x,y)}\),该性质已在我的这篇博客中给出了详细证明,这里就不再赘述了。
考虑怎样将 LCM 转化为 gcd,注意到有个东西叫 Min-Max 容斥,即对于集合 \(S\),\(\max(S)=\sum\limits_{\varnothing\ne T\subseteq S}(-1)^{|T|+1}\min(T)\),该性质同样可以应用于 lcm/gcd,因为 \(\operatorname{lcm}\) 即可看作每个数的每个质因子次数取 \(\max\),\(\gcd\) 即可看作每个数的每个质因子次数取 \(\min\),因此我们同样有 \(\operatorname{lcm}(S)=\prod\limits_{\varnothing\ne T\subseteq S}\gcd(T)^{(-1)^{|T|+1}}\),因此我们有 \(ans=\prod\limits_{\varnothing\ne T\subseteq S}f_{\gcd(T)}^{(-1)^{|T|+1}}\)。
到这里还是不太容易直接求,不过考虑有个东西叫莫比乌斯反演,我们记 \(a_d=\sum\limits_{\gcd(T)=d}(-1)^{|T|+1}\),再记 \(b_d=\sum\limits_{d\mid\gcd(T)}(-1)^{|T|+1}\),那么显然 \(ans=\prod\limits_{d}f_d^{a_d}\),接下来考虑怎样求 \(a_d\),按照莫比乌斯反演的套路有 \(b_d=\sum\limits_{d|n}a_n\),即 \(b=a*I\),反演以下可得 \(a=b*\mu\),即 \(a_d=\sum\limits_{d\mid n}b_n\mu(\dfrac{n}{d})\),枚举倍数即可求出 \(a_d\)。那么怎么求 \(b_d\) 呢?记 \(U=\{a_x|d\mid a_x\}\),那么显然所有 \(U\) 的子集都可以成为求和式中的 \(T\),即 \(b_d=\sum\limits_{i=1}^{|U|}\dbinom{|U|}{i}(-1)^i\),根据二项式定理该值就等于 \([|U|>0]\),随便算一下即可,时间复杂度 \(a_i\log a_i\)。
const int MAXV=1e6;
const int MOD=1000000007;
int qpow(int x,int e){
// eprintf("%d\n",e);
if(e<0) e+=MOD-1;int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int n,mu[MAXV+5],pr[MAXV/10+5],prcnt=0;
bitset<MAXV+5> vis;
void sieve(int n){
mu[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){pr[++prcnt]=i;mu[i]=-1;}
for(int j=1;j<=prcnt&&pr[j]*i<=n;j++){
vis[pr[j]*i]=1;
if(i%pr[j]==0) break;
mu[i*pr[j]]=-mu[i];
}
}
}
int is[MAXV+5],f[MAXV+5],fib[MAXV+5];
int main(){
sieve(MAXV);scanf("%d",&n);
for(int i=1,x;i<=n;i++) scanf("%d",&x),is[x]=1;
for(int i=1;i<=MAXV;i++) for(int j=i;j<=MAXV;j+=i) is[i]|=is[j];
for(int i=1;i<=MAXV;i++) for(int j=i;j<=MAXV;j+=i) f[i]+=is[j]*mu[j/i];
fib[1]=fib[2]=1;for(int i=3;i<=MAXV;i++) fib[i]=(fib[i-1]+fib[i-2])%MOD;
int mul=1;for(int i=1;i<=MAXV;i++) mul=1ll*mul*qpow(fib[i],f[i])%MOD;
printf("%d\n",mul);
return 0;
}
51nod 1355 - 斐波那契的最小公倍数(Min-Max 容斥+莫比乌斯反演)的更多相关文章
- 【51nod1355】斐波那契的最小公倍数(min-max容斥)
[51nod1355]斐波那契的最小公倍数(min-max容斥) 题面 51nod 题解 显然直接算还是没法算的,所以继续考虑\(min-max\)容斥计算. \[lcm(S)=\prod_{T\su ...
- 51nod1355-斐波那契的最小公倍数【min-max容斥】
正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1355 题目大意 定义\(f_i\)表示斐波那契的第\(i\)项,给出一个 ...
- [51nod1355] 斐波那契的最小公倍数
Description 给定 \(n\) 个正整数 \(a_1,a_2,...,a_n\),求 \(\text{lcm}(f_{a_1},f_{a_2},...,f_{a_n})\).其中 \(f_i ...
- 51nod 1242 斐波那契数列的第N项
之前一直没敢做矩阵一类的题目 其实还好吧 推荐看一下 : http://www.cnblogs.com/SYCstudio/p/7211050.html 但是后面的斐波那契 推导不是很懂 前面讲的挺 ...
- 51Nod - 1242 斐波那契(快速幂)
斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, ...
- 51nod 1031+斐波那契和杨辉三角的一些基础知识
直接斐波那契... #include<stdio.h> #include<queue> #include<string.h> #include<iostrea ...
- (矩阵快速幂)51NOD 1242斐波那契数列的第N项
斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2) (1, 1, 2, 3, 5, 8, 13, 21, ...
- Solution -「51nod 1355」斐波那契的最小公倍数
\(\mathcal{Description}\) Link. 令 \(f\) 为 \(\text{Fibonacci}\) 数列,给定 \(\{a_n\}\),求: \[\operatorn ...
- 51nod 1350 斐波那契表示(递推+找规律)
传送门 题意 分析 我们发现该数列遵循下列规律: 1 1,2 1,2,2 1,2,2,2,3 1,2,2,2,3,2,3,3 我们令A[i]表示f[i]开始长为f[i-1]的i的最短表示和 那么得到A ...
随机推荐
- 【UE4】读写 Texture 数据
创建texture 方式一 void AActor_Assignment2::TextureFromImage_Internal( const TArray<FColor>& Sr ...
- python查询对像所有方法
鉴于学习时好多参数对像都不知道是什么玩意有什么方法,搜了半天一个 """arg为一个对像,下面是打印所有对像方法"""for i, func ...
- 【二食堂】Beta - 项目展示
项目展示 1. 团队介绍 二食堂很难排队 姓名 介绍 职务 刘享 热爱游戏,尤其是RPG和metrovinia类的游戏. 会C/C++, python, java. 后端 左正 一个普通的大学生,Py ...
- 常见SOC启动流程分析
本文以s5pv210这款SOC为例,分析了其启动流程 在s5pv210的SOC内部,存在着一个内部的ROM和一个内部的RAM 这个内部的ROM叫做 IROM,它是norflash的一种.其不同于板子上 ...
- 前端大牛带你了解JavaScript 函数式编程
前言 函数式编程在前端已经成为了一个非常热门的话题.在最近几年里,我们看到非常多的应用程序代码库里大量使用着函数式编程思想. 本文将略去那些晦涩难懂的概念介绍,重点展示在 JavaScript 中到底 ...
- Unity的Deferred Shading
什么是Deferred Shading Unity自身除了支持前向渲染之外,还支持延迟渲染.Unity的rendering path可以通过Edit/Project Settings中的Graphic ...
- SVN查看项目修改记录及修改内容
工具/原料 svn 一,查看修改记录 1 选择要查看的文件夹,打开之后在空白的地方右键. 2 选择svn里面的"查看日志".show_Log 3 在弹出的日志框里,可以看到,你可以 ...
- linux Segmentation faults 段错误详解
什么是段错误 下面是来自 Answers.com 的定义: A segmentation fault (often shortened to segfault) is a particular err ...
- Luogu P1297 [国家集训队]单选错位 | 概率与期望
题目链接 题解: 单独考虑每一道题目对答案的贡献. 设$g_i$表示gx在第$i$道题目的答案是否正确(1表示正确,0表示不正确),则$P(g_i=1)$表示gx在第$i$道题目的答案正确的概率. 我 ...
- maven+springmvc+cxf 实现简单webservice小例子
1.首先你需要创建一个maven项目[当然是web项目] 2.pom.xml添加以下 <properties> <cxf.version>2.2.3</cxf.versi ...