推狮子的部分

\[\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sigma(ijk)
=\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^C\sum_{x|i}\sum_{y|j}\sum_{z|k}\epsilon(\gcd(x,y))\epsilon(\gcd(y,z))\epsilon(\gcd(x,z))\\
=\sum_{i=1}^A\sum_{x|i}\sum_{j=1}^B\sum_{y|j}\sum_{k=1}^C\sum_{z|k}\epsilon(\gcd(x,y))\epsilon(\gcd(y,z))\epsilon(\gcd(x,z))\\
=\sum_{x=1}^A\lfloor\frac{A}{x}\rfloor\sum_{y=1}^B\lfloor\frac{B}{y}\rfloor\sum_{z=1}^C\lfloor\frac{C}{z}\rfloor\epsilon(\gcd(x,y))\epsilon(\gcd(y,z))\epsilon(\gcd(x,z))\\
=\sum_{x=1}^A\lfloor\frac{A}{x}\rfloor\sum_{y=1}^B\lfloor\frac{B}{y}\rfloor\sum_{z=1}^C\lfloor\frac{C}{z}\rfloor\sum_{d|x,d|y}\mu(d)\sum_{p|y,p|z}\mu(p)\sum_{q|x,q|z}\mu(q)\\
=\sum_{d=1}^{\min(A,B)}\mu(d)\sum_{p=1}^{\min(B,C)}\mu(p)\sum_{q=1}^{\min(A,C)}\mu(q)\sum_{d|x,q|x}^A\lfloor\frac{A}{x}\rfloor\sum_{d|y,p|y}^B\lfloor\frac{B}{y}\rfloor\sum_{p|z,q|z}^C\lfloor\frac{C}{z}\rfloor\\
=\sum_{d=1}^{\min(A,B)}\mu(d)\sum_{p=1}^{\min(B,C)}\mu(p)\sum_{q=1}^{\min(A,C)}\mu(q)\sum_{lcm(d,q)|x}^A\lfloor\frac{A}{x}\rfloor\sum_{lcm(d,p)|y}^B\lfloor\frac{B}{y}\rfloor\sum_{lcm(p,q)|z}^C\lfloor\frac{C}{z}\rfloor\\
\text{define } f(n,t)=\sum_{t|x}\lfloor\frac{n}{x}\rfloor ,N=\max(A,B,C)\\
\cdots=\sum_{d=1}^N\mu(d)\sum_{p=1}^N\mu(p)\sum_{q=1}^N\mu(q)f(A,lcm(d,q))f(B,lcm(d,p))f(C,lcm(p,q))\\
\]

计算答案

其中\(f(n,t)\)可以\(O(n\log n)\)预处理。

考虑对\(T\)个点连边建图,\(u\)、\(v\)之间有边当且仅当\(\mu(u)\not=0,\mu(v)\not=0,lcm(a,b)\not>T\)。那么图中的每个三元环都能算入答案,这里的三元环还包括只有俩点的和只有单点的。

对于包含三个点的\(<d,p,q>\)的贡献为

\[\mu(d)\mu(p)\mu(q)\times\\
(f(A,lcm(d,q))f(B,lcm(d,p))f(C,lcm(p,q))+\\
f(A,lcm(d,q))f(B,lcm(p,q))f(C,lcm(d,p))+\\
f(A,lcm(d,p))f(B,lcm(d,q))f(C,lcm(p,q))+\\
f(A,lcm(d,p))f(B,lcm(p,q))f(C,lcm(d,q))+\\
f(A,lcm(p,q))f(B,lcm(d,p))f(C,lcm(d,q))+\\
f(A,lcm(p,q))f(B,lcm(d,q))f(C,lcm(d,p)))
\]

对于包含两个、一个的环同理。统计三元环的方法参照不常用的黑科技——「三元环」

参考实现

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=1e9+7; //[SDOI2018]旧试题 int pr[N],cnt;
int mu[N],bk[N],deg[N];
long long fa[N],fb[N],fc[N];
bool vis[N];
struct Node {int u,v,w;};
struct Edge {int ver,len;}; Node ech[N*300];
vector<Edge> e[N]; int solve(int a,int b,int c) {
long long ans=0;
int n=max(a,max(b,c)),m=0;
for(int i=1; i<=n; ++i) {
deg[i]=fa[i]=fb[i]=fc[i]=0;
e[i].clear();
}
for(int i=1; i<=n; ++i) {
for(int x=i; x<=n; x+=i) {
fa[i]+=a/x,fb[i]+=b/x,fc[i]+=c/x;
}
}
for(int i=1; i<=a&&i<=b&&i<=c; ++i) {
if(mu[i]) ans+=mu[i]*mu[i]*mu[i]*fa[i]*fb[i]*fc[i];
}
for(int g=1; g<=n; ++g) {
for(int i=1; i*g<=n; ++i) if(mu[i*g]) {
for(int j=i+1; 1LL*i*j*g<=n; ++j) if(mu[j*g]&&__gcd(i,j)==1) {
int u=i*g,v=j*g,w=i*j*g;
deg[u]++,deg[v]++,ech[++m]=(Node){u,v,w};
ans+=mu[u]*mu[u]*mu[v]*(fa[u]*fb[w]*fc[w]+fa[w]*fb[u]*fc[w]+fa[w]*fb[w]*fc[u]);
ans+=mu[u]*mu[v]*mu[v]*(fa[v]*fb[w]*fc[w]+fa[w]*fb[v]*fc[w]+fa[w]*fb[w]*fc[v]);
}
}
}
for(int i=1; i<=m; ++i) {
if(deg[ech[i].u]<deg[ech[i].v]||(deg[ech[i].u]==deg[ech[i].v]&&ech[i].u<ech[i].v))
swap(ech[i].u,ech[i].v);
e[ech[i].u].push_back((Edge){ech[i].v,ech[i].w});
}
#define veit vector<Edge>::iterator
for(int i=1; i<=n; ++i) if(mu[i]) {
for(veit j=e[i].begin(); j!=e[i].end(); ++j) bk[j->ver]=j->len;
for(veit j=e[i].begin(); j!=e[i].end(); ++j) {
for(veit k=e[j->ver].begin(); k!=e[j->ver].end(); ++k) {
if(!bk[k->ver]) continue;
ans+=mu[i]*mu[j->ver]*mu[k->ver]*(
fa[j->len]*fb[k->len]*fc[bk[k->ver]]+fa[j->len]*fb[bk[k->ver]]*fc[k->len]+fa[k->len]*fb[j->len]*fc[bk[k->ver]]+
fa[k->len]*fb[bk[k->ver]]*fc[j->len]+fa[bk[k->ver]]*fb[j->len]*fc[k->len]+fa[bk[k->ver]]*fb[k->len]*fc[j->len]
);
}
}
for(veit j=e[i].begin(); j!=e[i].end(); ++j) bk[j->ver]=0;
}
return (ans%mod+mod)%mod;
} void sieve() {
mu[1]=1;
for(int i=2; i<N; ++i) {
if(!vis[i]) mu[pr[++cnt]=i]=-1;
for(int j=1; j<=cnt&&i*pr[j]<N; ++j) {
vis[i*pr[j]]=1;
if(i%pr[j]==0) break;
else mu[i*pr[j]]=-mu[i];
}
}
} int main() {
sieve();
int T,a,b,c;
scanf("%d",&T);
while(T--) {
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",solve(a,b,c));
}
return 0;
}

[SDOI2018] 旧试题的更多相关文章

  1. 【BZOJ5332】[SDOI2018]旧试题(数论,三元环计数)

    [BZOJ5332][SDOI2018]旧试题(数论,三元环计数) 题面 BZOJ 洛谷 题解 如果只有一个\(\sum\),那么我们可以枚举每个答案的出现次数. 首先约数个数这个东西很不爽,就搞一搞 ...

  2. P4619 [SDOI2018]旧试题

    题目 P4619 [SDOI2018]旧试题 Ps:山东的题目可真(du)好(liu),思维+码量的神仙题 推式 求\(\sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ij ...

  3. BZOJ5332: [Sdoi2018]旧试题(莫比乌斯反演)

    时光匆匆,转眼间又是一年寒暑…… 这是小 Q 同学第二次参加省队选拔赛. 今年,小 Q 痛定思痛,不再冒险偷取试题,而是通过练习旧 试题提升个人实力.可是旧试题太多了,小 Q 没日没夜地做题,却看不到 ...

  4. sdoi2018旧试题 证明

  5. Bzoj5332: [Sdoi2018]旧试题

    国际惯例的题面首先我们进行一些相对显然的数学变化.解释一下第二行的那个变形,如果一个数是ijk的因数,那么它一定能被分解成三部分分别是i,j,k的因数.我们钦定一个质数只能在三部分的一个中出现.如果一 ...

  6. LOJ2565 SDOI2018 旧试题 莫比乌斯反演、三元环计数

    传送门 这道题的思路似乎可以给很多同时枚举三个量的反演题目提供一个很好的启发-- 首先有结论:\(d(ijk) = \sum\limits_{x|i}\sum\limits_{y|j}\sum\lim ...

  7. [bzoj 5332][SDOI2018]旧试题

    传送门 Description \[ \sum_{i=1}^A\sum_{j=1}^B\sum_{k=1}^Cd(ijk) (\mathrm{mod\:} 10^9+7) \] 其中 \(d(ijk) ...

  8. loj#2565. 「SDOI2018」旧试题(反演 三元环计数)

    题意 题目链接 Sol 神仙反演题.在洛谷上疯狂被卡常 Orz shadowice #include<bits/stdc++.h> #define Pair pair<int, in ...

  9. LOJ2476. 「2018 集训队互测 Day 3」蒜头的奖杯 & LOJ2565. 「SDOI2018」旧试题(莫比乌斯反演)

    题目链接 LOJ2476:https://loj.ac/problem/2476 LOJ2565:https://loj.ac/problem/2565 题解 参考照搬了 wxh 的博客. 为了方便, ...

随机推荐

  1. dynamic动态类型的扩展方法

    对于一个动态类型来说,你可以认为它包含任意成员,它们都能通过编译.但到了运行时,到底是否拥有这些成员,就真相大白了.如 dynamic test = ; Console.Write(test.Name ...

  2. python tesserocr ImportError: dll loading failed 一个不常遇见的错误,以及简单的python安装方法~

    废话不多说了,这是写给小白的了. 本人有c#,c/c++开发经验,最近因为偶然的原因,开始接触python,遇到一个棘手的问题,一位朋友在安装tesserocr 包后遇到一个错误,重新安装数次不能解决 ...

  3. SpringBoot主程序注解@SpringBootApplication简单分析

    一.@SpringBootApplication说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用: @SpringBootA ...

  4. Java中 StringTokenizer 的用法

    一.StringTokenizer 1.1 StringTokenizer简介及其构造函数的三种形式: StringTokenizer类是字符串分割解析类型,其属于java.util包,在使用之前需要 ...

  5. python基础----1. globals和locals

    官方文档 globals """ Return a dictionary representing the current global symbol table. Th ...

  6. vue插件官方文档,做个记录

    vue的插件,组件都可以按照这种方式添加 官方文档 https://cn.vuejs.org/v2/guide/plugins.html 做个记录用

  7. BFS —— 信息学一本通(1451:棋盘游戏)

    题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子.现在给出一个初始棋盘和一个最终棋盘,要求你找出一个最短的移动序 ...

  8. Unity-批量修改Prefab上的属性

    问题描述:今天发现工程中有些prefab上的脚本丢失了一些引用,本以为手动拖拽上去搞定,后来查看其它prefab,也有类似的问题,于是写了一个小工具,批量修改下. 上代码: [ExecuteInEdi ...

  9. 关于 Mybatis 设置懒加载无效的问题

    看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: <settings> <!-- 打开延迟加载的开 ...

  10. go-设计思想

    1, 围绕 简单 这一核心的设计 隐式接口,切片, 类的弱化,强制用组合 简洁高效的并发 弱化的指针 err 判定,先判错的习俗. 2, 有自己的坚持,不盲目攀比 比优点比不过很多语言,没C快,没ja ...