没啥意思的板子题。

首先,众所周知,

\[\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. iOS 常用第三方库及原理

    AFNetWorking SDWebImage MJRefresh Masonry YYModel IQKeyboardManger

  2. CodeGym自学笔记05——类名

    1.Java 程序由类组成.每个类都存储在一个单独的文件中,其文件名称与类名一致.该文件的扩展名为 java. 2.当我们有许多类文件时,我们会将它们分组到文件夹和子文件夹中.此外,类还会被分组到包和 ...

  3. Dependency Analyzer

    Dependency Analyzer  idea插件  查找maven依赖 1.Setting---->Plugins------>Dependency Analyzer 2.使用 po ...

  4. python实现Excel的表头与索引之间的转换

    字母转数字 def get_index(capital): """ 大写字母(Excel列头)转索引 :param capital: 'A' --> 0, 'AA' ...

  5. Jsonhelper类

    public static class JsonHelper { #region json转对象 /// <summary> /// json转对象 /// </summary> ...

  6. JavaSE——构造方法

    package com.zhao.test3; public class Student { private String name; private int age; //如果我们自己没有写任何的构 ...

  7. winform 子控件触发父控件事件

    private void circlePanel_Click(object sender, EventArgs e) { var panel=sender as UIPanel; if (panel. ...

  8. C/C++中的可变参数

    所需的函数参数不固定,需要用到带有可变参数的函数,类似printf();项目中需要打印信息等也会用到带可变参数的函数. C语言标准库的头文件 #include<stdarg.h>包含一组能 ...

  9. Exp6 MSF应用基础

    目录 一.实践内容 1 一个主动攻击实践 漏洞介绍 1 攻击前的准备 2 执行攻击 2 一个针对浏览器的攻击 3 一个针对客户端的攻击,以office为例 4 辅助模块的使用 二.问题回答 1 用自己 ...

  10. hexo部署和优化记录

    title: hexo部署和优化记录 date: 2020-06-14 09:00:03 前端 tags: hexo summary: Repository_Pages使用.Github仓库打造网页群 ...