给 n 个斐波那契数,求他们的最小公倍数,膜 $10^9+7$
$n leq 50000$,给出的斐波那契数都在不超过 $10^6$ 项出现
sol:

#include <bits/stdc++.h> using namespace std; const int N=1e6+50, mod=1e9+7; inline int add(int x,int y) {return (x+y>=mod) ? (x+y-mod) : (x+y);} inline int dec(int x,int y) {return (x-y<0) ? (x-y+mod) : (x-y);} inline int mul(int x,int y) {return (long long)x*y%mod;} inline int power(int a,int b,int rs=1) {for(;b;b>>=1,a=mul(a,a)) if(b&1) rs=mul(rs,a); return rs;} int n,a[N],mx,fib[N],g[N],ok[N]; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i], mx=max(mx,a[i]), ok[a[i]]=1; fib[1]=1; for(int i=2;i<=mx;i++) fib[i]=add(fib[i-1],fib[i-2]); for(int i=1;i<=mx;i++) g[i]=fib[i]; int ans=1; for(int i=1;i<=mx;i++) { const int inv=power(g[i],mod-2); for(int j=2;j*i<=mx;j++) g[i*j]=mul(g[i*j],inv); } for(int i=1;i<=mx;i++) for(int j=1;j*i<=mx;j++) if(ok[i*j]) {ans=mul(ans,g[i]); break;} cout<<ans<<endl; }