没啥意思的板子题。

首先,众所周知,

\[\gcd\{f_a,f_b\}=f_{\gcd\{a,b\}}
\]

所以考虑将 \(\operatorname{lcm}\) 转化为 \(\gcd\)。

\(\min-\max\) 容斥指出,

\[\max_{a\in S}a=\sum_{T\subseteq S,T\neq\varnothing}(-1)^{|T|-1}\min_{a\in T}a
\]

于是有推论

\[\mathop{\operatorname{lcm}}\limits_{a\in S}a=\prod_{T\subseteq S,T\neq\varnothing}(\gcd_{a\in T}a)^{(-1)^{|T|-1}}
\]

(对每个质因子做一次 \(\min-\max\) 反演)

于是只用计算每个 \(v=\gcd\limits_{a\in T}a\),其 \(v\) 的幂次的贡献。

考虑到这需要 \(\gcd\) 卷积。

不妨设有全集 \(U\),满足其为所有(考虑范围内的)数的倍数。

这样,我们即可用 \(\gcd\) 卷积描述其为

\[z^U-\prod_{a\in S}^{\gcd\text{卷积}}(z^U-z^a)
\]

众所周知这个形式可以使用 CF449D 的技巧,用 Dirichlet 前缀和可以对其优化。

然后就做完了。

核心代码很短。

const ullt Mod=1e9+7;
typedef ConstMod::mod_ullt<Mod>modint;
typedef std::vector<modint>modvec;
int Cnt[2000005];
bol Gone[2000005];
modint F[2000005];
int main()
{
#ifdef MYEE
freopen("QAQ.in","r",stdin);
// freopen("QAQ.out","w",stdout);
#endif
uint n;scanf("%u",&n);
for(uint i=0,v;i<n;i++)
scanf("%u",&v),Cnt[v]++;
for(uint i=2;i<=1000000;i++)if(!Gone[i]){
for(uint j=1000000/i*i;j;j-=i)
Cnt[j/i]+=Cnt[j],Gone[j]=1;
Gone[i]=0;
}
F[1]=1;
for(uint i=1;i<=1000000;i++)
Cnt[i]=(bol)Cnt[i],F[i+1]=F[i]+F[i-1];
for(uint i=2;i<=1000000;i++)if(!Gone[i])
for(uint j=i;j<=1000000;j+=i)
Cnt[j/i]-=Cnt[j];
modint ans(1);
for(uint i=1;i<=1000000;i++)
ans*=Cnt[i]>=0?F[i]^Cnt[i]:F[i]^(((Mod-2)*-Cnt[i])%(Mod-1));
ans.println();
return 0;
}

51nod1355的更多相关文章

  1. 【51nod1355】斐波那契的最小公倍数(min-max容斥)

    [51nod1355]斐波那契的最小公倍数(min-max容斥) 题面 51nod 题解 显然直接算还是没法算的,所以继续考虑\(min-max\)容斥计算. \[lcm(S)=\prod_{T\su ...

  2. [51nod1355] 斐波那契的最小公倍数

    Description 给定 \(n\) 个正整数 \(a_1,a_2,...,a_n\),求 \(\text{lcm}(f_{a_1},f_{a_2},...,f_{a_n})\).其中 \(f_i ...

随机推荐

  1. SAP 后台任务定时job

    定时任务的事务码 sm36:创建定时任务 sm37:查看定时任务 JDBG:后台任务debug,在对应的sm37中对应的job页面 t-code输入 创建定时任务SM36 名称可以随便起 一般都是按自 ...

  2. 关于JMeter WebSocket插件:JMeter WebSocket插件-关闭SignalR连接--webSocket Close报错

    在浦发银行的项目中,主机运维连接成功不做任何操作的场景中,用到了webSocket协议,但是脚本运行中出现webSocke Close报错--解决方案:在webSocket Open Connecti ...

  3. SAP HANA:XS Job

    5.SAP HANA XS Job XS Job:定义重复执行的后台定期任务: 例如定时执行数据更新到Table的操作,需要使用到XS Job; SAP HANA XS Setting up Sche ...

  4. 10. watch的实现原理

    watch的实现原理 watch和computed一样, 也是基于 Watcher 的 组件内部使用的watch 和 外部使用的 vm.$watch()都是调用的Vue.prototype.$watc ...

  5. maven项目pom.xml报未找到指定路径文件

    解决方法: 错误环境:Tomcat7 + Eclipse + Maven + Spring + SpringMvc + Mybatis 错误描述: 错误解决步骤: 1.找到eclipse的projec ...

  6. page-break-after:always 打印分页

    在实现打印功能时候,可以完整分页,需要配合二维数组来使用,避免下一页数据展示到上一页

  7. nnlog 日志模块

    python自带的logging模块理解起来比较费劲,直接pip install nnlog即可 1 import nnlog 2 log = nnlog.Logger(file_name='my.l ...

  8. Linux配置文件和网络常用命令总结

    Linux应用配置大全 Linux网络基本配置 最小化安装的话是没有ifconfig命令的需要使用yum search ifconfig查找,然后yum install net-tools.x86_6 ...

  9. C# 生成二维码方法(QRCoder)

    前言 二维码很多地方都有使用到.如果是静态的二维码还是比较好处理的,通过在线工具就可以直接生成一张二维码图片,比如:草料二维码. 但有的时候是需要动态生成的(根据动态数据生成),这个使用在线就工具就无 ...

  10. jquery 去除兄弟节点的class

    function chooseCategory(dicCode,obj){ $(obj).siblings('a').removeClass("active"); $(obj).a ...