51nod 1355 斐波那契的最小公倍数 莫比乌斯反演+数学

来源:互联网 发布:陈乔恩长相知乎 编辑:程序博客网 时间:2024/06/11 10:20

题意

F(0) = 0 F(1) = 1
F(n) = F(n-1) + F(n-2)
给出n个正整数a1, a2,…… an,求对应的斐波那契数的最小公倍数,由于数字很大,输出Mod 1000000007的结果即可。
2 <= N <= 50000,1 <= ai <= 1000000。

分析

跪zyz大爷写的题解。

首先有个结论就是

gcd(fn,fm)=fgcd(n,m)

证明的话可以根据fn+m=fnfm1+fn+1fm来推导。

还有一个结论就是

lcm{S}=TS,Tϕgcd(T)(1)|T|+1

证明的话可以考虑知道每个子集的最小值通过容斥来求全集的最大值。
Max(S)=TS,Tϕ(1)|T|+1Min(T)
为什么这样是对的呢?如果真的无法把这个东西看做容斥的话可以这样想:
我们把全集从大到小排序后,第n个数出现的次数就是i=0n1(1)iCin1
注意到这条式子只有当n=0时为1否则为0,因此得出来的是最大值。

从而可以得到

lcm(fS)=TS,Tϕgcd(fT)(1)|T|+1

=TS,Tϕ(fgcd(T))(1)|T|+1

然后我们构造数列{gd}满足fn=d|ngd
那么有
lcm(fS)=TS,Tϕ(d|gcd(T)gd)(1)|T|+1

=d(gd)TS,Tϕ,d|gcd(T)(1)|T|+1

注意到其指数上的式子
TS,Tϕ,d|gcd(T)(1)|T|+1

当存在xS满足d|x时该式子为1,否则为0。
那么有
lcm(fS)=xS,d|xgd

在求出gd后这条式子显然可以在O(nlogn)内计算完毕。
gd的话可以通过对定义式进行变形得到
gn=fn(d|n,dngd)1

那么gd显然也可以在O(nlogn)内预处理完毕,问题解决。

代码

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int N=1000005;const int MOD=1000000007;int n,f[N];bool vis[N];int read(){    int x=0,f=1;char ch=getchar();    while (ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}int ksm(int x,int y){    int ans=1;    while (y)    {        if (y&1) ans=(LL)ans*x%MOD;        x=(LL)x*x%MOD;y>>=1;    }    return ans;}int main(){    n=read();int mx=0;    for (int i=1;i<=n;i++)    {        int x=read();        mx=max(mx,x);vis[x]=1;    }    for (int i=1;i<=mx;i++)        for (int j=i;j<=mx;j+=i)            vis[i]|=vis[j];    f[1]=f[2]=1;    for (int i=3;i<=mx;i++) f[i]=f[i-1]+f[i-2],f[i]-=f[i]>=MOD?MOD:0;    int ans=1;    for (int i=1;i<=mx;i++)    {        int ny=ksm(f[i],MOD-2);        for (int j=i*2;j<=mx;j+=i) f[j]=(LL)f[j]*ny%MOD;        if (vis[i]) ans=(LL)ans*f[i]%MOD;    }    printf("%d",ans);    return 0;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 变得越来越懒了怎么办 自己太懒了怎么办 老人身体没力气怎么办 隔壁wifi信号弱怎么办 手机wf信号弱怎么办 屋里wifi信号差怎么办 房间收不到wifi怎么办 室内wifi信号弱怎么办 wifi卧室信号差怎么办 卧室wifi信号弱怎么办 wifi卧室没信号怎么办 wifi房间信号差怎么办 房间无线信号弱怎么办 蹭网wifi信号差怎么办 苹果6wifi打不开怎么办 苹果无线信号弱怎么办 苹果7信号不好怎么办 苹果网络信号差怎么办 电脑wifi没有了怎么办 无线wifi信号差怎么办 wifi都没有了怎么办 无线网没有信号怎么办 路由器变慢了怎么办 wi-fi信号不好怎么办 苹果wifi信号弱怎么办 无线接收信号弱怎么办 电脑wifi信号差怎么办 单位wifi信号差怎么办 一楼手机信号差怎么办 有轻度的狐臭怎么办 狐臭味越来越重怎么办 一只眼睛近视怎么办 散光引起的弱视怎么办 孩子远视加散光怎么办 先天性的近视该怎么办 30岁得了弱视怎么办 24岁弱视0.8怎么办 弱视近视加散光怎么办 眼睛小又是吊眼怎么办 眼睛进东西怎么办妙招 眼睛进东西了怎么办