设\(cnt[i]\)为权值为i的倍数的数的数量。

\(f0[i],f1[i]\)分别为两种方法\(gcd=i\)的贡献是i的多少倍。

\(F0[i],F1[i]\)分别为两种方法\(gcd\)为\(i\)的倍数的贡献是i的多少倍。

\(F0[i]=\sum_{j=1}^{cnt[i]}A_{cnt[i]}^{cnt[i]-j}*(n-j)!*(n-j+1)\)

\(F1[i]=\sum_{j=1}^{cnt[i]}j*C_{cnt[i]}^{j}\)

然后显然有\(F[i]=\sum_{d\mid i}f[d]\)

然后莫比乌斯反演一下

\[f(n)=∑_{n\mid d}μ(\frac{d}{n})F(d)
\]

复杂度调和级数\(O(nlnn)\)

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define int long long
const int N=101000;
const int p=258280327;
bool book[N];
int prime[N],mu[N],fac[N],inv[N],num;
int a[N],F0[N],f0[N],F1[N],f1[N],mx,cnt[N],T,n;
int read(){
int sum=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return sum*f;
}
void init(){
for(int i=0;i<=100000;i++)
cnt[i]=a[i]=f1[i]=f0[i]=F1[i]=F0[i]=0;
}
int ksm(int x,int b){
int tmp=1;
while(b){
if(b&1)tmp=tmp*x%p;
x=x*x%p;
b>>=1;
}
return tmp;
}
int A(int n,int m){
return fac[n]*inv[n-m]%p;
}
int C(int n,int m){
return fac[n]*inv[n-m]%p*inv[m]%p;
}
void pre_work(){
mu[1]=1;
for(int i=2;i<=100000;i++){
if(book[i]==0){
prime[++num]=i;
mu[i]=-1;
}
for(int j=1;j<=num&&prime[j]*i<=100000;j++){
book[i*prime[j]]=1;
if(i%prime[j]==0)break;
mu[prime[j]*i]=-mu[i];
}
}
fac[0]=1;
for(int i=1;i<=100000;i++)fac[i]=(fac[i-1]*i)%p;
inv[100000]=ksm(fac[100000],p-2);
for(int i=99999;i>=0;i--)inv[i]=inv[i+1]*(i+1)%p;
}
signed main(){
pre_work();
while(scanf("%lld",&n)!=EOF){
init();
for(int i=1;i<=n;i++)a[read()]++;
for(int i=1;i<=100000;i++)
for(int j=i;j<=100000;j+=i)cnt[i]+=a[j];
for(int i=1;i<=100000;i++)
for(int j=1;j<=cnt[i];j++)
F0[i]=(F0[i]+A(cnt[i],j)*fac[n-j+1])%p,
F1[i]=(F1[i]+C(cnt[i],j)*j)%p;
for(int i=1;i<=100000;i++)
for(int j=i;j<=100000;j+=i)
f0[i]=(f0[i]+mu[j/i]*F0[j])%p,
f1[i]=(f1[i]+mu[j/i]*F1[j])%p;
int ans1=0,ans2=0;
for(int i=1;i<=100000;i++)
ans1=(ans1+f0[i]*i)%p,
ans2=(ans2+f1[i]*i)%p;
if(ans1>ans2)printf("Mr. Zstu %lld\n",ans1);
else if(ans1<ans2)printf("Mr. Hdu %lld\n",ans2);
else printf("Equal %lld\n",ans2);
}
return 0;
}

hdu5321 beautiful set(莫比乌斯反演)的更多相关文章

  1. HDU 5321 Beautiful Set (莫比乌斯反演 + 逆元 + 组合数学)

    题意:给定一个 n 个数的集合,然后让你求两个值, 1.是将这个集合的数进行全排列后的每个区间的gcd之和. 2.是求这个集合的所有的子集的gcd乘以子集大小的和. 析:对于先求出len,len[i] ...

  2. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  3. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  4. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  5. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)

    题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...

  6. 莫比乌斯函数筛法 & 莫比乌斯反演

    模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...

  7. 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2371  Solved: 1143[Submit][Sta ...

  8. POI2007_zap 莫比乌斯反演

    题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...

  9. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

随机推荐

  1. 结构化编程-Structured programming

    结构话编程强调的是对流程的控制: 它为面向过程编程提供天然的支持. Structured programming is a programming paradigm aimed at improvin ...

  2. node——underscore的使用

    我在做新闻页面时,需要将之前存好点的data.json里的数据显示在首页上,而首页的每条新闻数据不能直接写定在上面,所以我们要将data里面的数据传递进去.我们需要使用underscore的templ ...

  3. Centos7下安装Mongodb

    Mongodb网盘路径:链接:https://pan.baidu.com/s/1rWJCPZ59EAW25ha1UF5czw 密码:u3zq 1.把安装包上传到linux服务器上,解压,然后我们把mo ...

  4. HDU 5912 Fraction

    题目来源:2016 CCPC 长春站 题意:青蛙先生想计算一个式子的值,输入两个数列a[],b[]求出最后的分子和分母 思路:一开始看到这个图片首先想到的是递归实现,递归部分始终计算的是右下部分 /* ...

  5. shell试题

    1.按单词出现频率降序排序! 2.按字母出现频率降序排序! The months of learning in Old Boy education are the few months that I ...

  6. oracle11.2静默安装

    操作系统及Oracle版本 Linux版本:rhel-server-5.8-x86_64-dvd Oracle版本:Oracle Database 11g Release 2 (11.2.0.4.0) ...

  7. Vue系列(二):发送Ajax、JSONP请求、Vue生命周期及实例属性和方法、自定义指令与过渡

    上一篇:Vue系列(一):简介.起步.常用指令.事件和属性.模板.过滤器 一. 发送AJAX请求 1. 简介 vue本身不支持发送AJAX请求,需要使用vue-resource.axios等插件实现 ...

  8. Js原生实现抽奖功能

    <div>代码 按钮代码 JS原生代码  完整的代码: <div style="width:365px;height:300px;border:2px solid gree ...

  9. php 魔术方法和魔术常量

    魔术方法:PHP把类中所有以__(两个下划线)开头的方法当成魔术方法,一般建议用户不要将自定义的方法前面加上__作为前缀.魔术方法: 1. __construct() 类的默认构造方法,如果__con ...

  10. HDU 4300 Contest 1

    扩展KMP很容易就明白过来了. 注意的是,后面明文的长度要少于密文,而且当前K+Extend[k]>=L 输出时犯了很多次二,后来人注意吧. #include <cstdio> #i ...