$\newcommand{fl}[1]{\left\lfloor#1\right\rfloor}$题意:求$\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\limits_{k=1}^c\sigma_0(ijk)$

做这题要用到一个结论:$\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\limits_{k=1}^c\sigma_0(ijk)=\sum\limits_{\substack{(i,j)=(j,k)=(k,i)=1\\i\leq a,j\leq b,k\leq c}}\fl{\frac ai}\fl{\frac bj}\fl{\frac ck}$,证明如下

令$f(a,b,c)=\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\limits_{k=1}^c\sigma_0(ijk),g(a,b,c)=\sum\limits_{\substack{(i,j)=(j,k)=(k,i)=1\\i\leq a,j\leq b,k\leq c}}\fl{\frac ai}\fl{\frac bj}\fl{\frac ck}$

对$f$容斥

$f(a,b,c)-f(a-1,b,c)-f(a,b-1,c)-f(a,b,c-1)+f(a-1,b-1,c)+f(a-1,b,c-1)+f(a,b-1,c-1)-f(a-1,b-1,c-1)=\sigma_0(abc)$

对$g$写出形式相同的式子

$g(a,b,c)-g(a-1,b,c)-g(a,b-1,c)-g(a,b,c-1)+g(a-1,b-1,c)+g(a-1,b,c-1)+g(a,b-1,c-1)-g(a-1,b-1,c-1)\\=\sum\limits_{\substack{(i,j)=(j,k)=(k,i)=1\\i\leq a,j\leq b,k\leq c}}\left(\fl{\frac ai}-\fl{\frac{a-1}i}\right)\left(\fl{\frac bj}-\fl{\frac{b-1}j}\right)\left(\fl{\frac ck}-\fl{\frac{c-1}k}\right)$

观察$g$的这条式子,只有$i|a,j|b,k|c$时,右边的三个括号才会有$1$的贡献,所以它统计的是满足$(i,j)=(j,k)=(k,i)=1$且$i|a,j|b,k|c$的$(i,j,k)$组数

对一个质数$p$,设$x$为满足$p^x|a$的最大$x$,类似地定义$y,z$

仅由$p$构成的$abc$的约数有$x+y+z+1$个($1$也被算入)

仅由$p$构成的$(i,j,k)$有$x+y+z+1$组($(1,1,1),(p^{1\cdots x},1,1),(1,p^{1\cdots y},1),(1,1,p^{1\cdots z})$)

又因为这俩都是积性函数,所以我们证明了$\sigma_0(abc)=\sum\limits_{\substack{(i,j)=(j,k)=(k,i)=1\\i|a,j|b,k|c}}$

这样一来,$f$和$g$的递推式就一模一样了,又因为$f(1,1,1)=g(1,1,1)=1$,所以$f(a,b,c)=g(a,b,c)$,得证

我们再回来推这题的公式

$\begin{align*}\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\limits_{k=1}^c\sigma_0(ijk)&=\sum\limits_{\substack{(i,j)=(j,k)=(k,i)=1\\i\leq a,j\leq b,k\leq c}}\fl{\frac ai}\fl{\frac bj}\fl{\frac ck}\\&=\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=1]\fl{\frac ai}\fl{\frac bj}\sum\limits_{k=1}^c[(k,ij)=1]\fl{\frac ck}\\&=\sum\limits_{i=1}^a\sum\limits_{j=1}^b[(i,j)=1]\fl{\frac ai}\fl{\frac bj}\sum\limits_{d|ij}\mu(d)\sum\limits_{k=1}^{\fl{\frac cd}}\fl{\frac c{kd}}\end{align*}$

令$f(n)=\sum\limits_{d|n}\mu(d)\sum\limits_{k=1}^{\fl{\frac cd}}\fl{\frac c{kd}}$,我们需要预处理出$f(1\cdots ab)$的值

注意到当$d$确定的时候,第二个sigma的值也确定了,所以我们枚举$d$,计算第二个sigma的值,并更新$d$的倍数的$f(n)$

最后统计答案即可,总时间复杂度$O\left(ab\log_2(ab)\right)$

#include<stdio.h>
typedef long long ll;
const int mod=1<<30,T=4000000;
int max(int a,int b){return a>b?a:b;}
int mul(int a,int b){return a*(ll)b%mod;}
void inc(int&a,int b){(a+=b)%=mod;}
int pr[T+10],mu[T+10],M;
bool np[T+10];
void sieve(){
	int i,j,M;
	M=0;
	mu[1]=1;
	for(i=2;i<=T;i++){
		if(!np[i]){
			M++;
			pr[M]=i;
			mu[i]=-1;
		}
		for(j=1;j<=M&&pr[j]*(ll)i<=T;j++){
			np[i*pr[j]]=1;
			if(i%pr[j]==0)break;
			mu[i*pr[j]]=-mu[i];
		}
	}
}
int f[T+10],g[2010][2010];
int main(){
	sieve();
	int a,b,c,i,j,d,ans;
	scanf("%d%d%d",&a,&b,&c);
	for(d=1;d<=a*b;d++){
		if(mu[d]){
			j=0;
			for(i=1;i<=c/d;i++)inc(j,c/(i*d));
			j*=mu[d];
			for(i=d;i<=a*b;i+=d)inc(f[i],j);
		}
	}
	for(i=1;i<=max(a,b);i++){
		for(j=1;j<=i;j++){
			if(i%j==0)
				g[i][j]=j;
			else
				g[i][j]=g[j][i%j];
		}
	}
	for(i=1;i<=max(a,b);i++){
		for(j=i+1;j<=max(a,b);j++)g[i][j]=g[j][i];
	}
	ans=0;
	for(i=1;i<=a;i++){
		for(j=1;j<=b;j++){
			if(g[i][j]==1)inc(ans,mul(mul(a/i,b/j),f[i*j]));
		}
	}
	printf("%d",ans);
}

[CF235E]Number Challenge的更多相关文章

  1. Codeforces 235E. Number Challenge DP

    dp(a,b,c,p) = sigma ( dp(a/p^i,b/p^j,c/p^k) * ( 1+i+j+k) ) 表示用小于等于p的素数去分解的结果有多少个 E. Number Challenge ...

  2. Easy Number Challenge(暴力,求因子个数)

    Easy Number Challenge Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  3. 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]CF-236B. Easy Number Challenge

    B. Easy Number Challenge time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  4. Java实现 蓝桥杯 算法训练 Number Challenge(暴力)

    试题 算法训练 Number Challenge 资源限制 时间限制:3.0s 内存限制:512.0MB 问题描述 定义d(n)为n的约数个数.现在,你有三个数a,b,c.你的任务是计算下面式子mod ...

  5. 「CF235E」Number Challenge「莫比乌斯反演」

    一个结论:(从二维扩展来的,三维也是对的,证明可以考虑质因数分解) \[ d(ijk)=\sum_{i'|i}\sum_{j'|j}\sum_{k'|k}[\gcd(i',j')=1][\gcd(i' ...

  6. Codeforces 235E Number Challenge

    http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...

  7. CF#235E. Number Challenge

    传送门 可以理解为上一道题的扩展板.. 然后我们就可以YY出这样一个式子 ${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)=\sum_{i=1}^a\sum_{ ...

  8. Codeforces 235 E Number Challenge

    Discription Let's denote d(n) as the number of divisors of a positive integer n. You are given three ...

  9. CodeForces 235E Number Challenge (莫比乌斯反演)

    题意:求,其中d(x) 表示 x 的约数个数. 析:其实是一个公式题,要知道一个结论 知道这个结论就好办了. 然后就可以解决这个问题了,优化就是记忆化gcd. 代码如下: #pragma commen ...

随机推荐

  1. 线程 packaged_task future

    http://www.cnblogs.com/haippy/p/3279565.html #include <iostream> // std::cout #include <fut ...

  2. idea中mybatis-plugin破解

    Mybatis Plugin 一.Mybatis Plugin插件是什么 提供Mapper接口与配置文件中对应SQL的导航 编辑XML文件时自动补全 根据Mapper接口, 使用快捷键生成xml文件及 ...

  3. ibeacon UUID

    import sys; import uuid; s=uuid.uuid4().hex #s="f6bc15e0939046679be1866ec8a199dc" sys.stdo ...

  4. 两数之和 [ leetcode ]

    原题地址:https://leetcode-cn.com/articles/two-sum/ 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元 ...

  5. Error in deleting blocks.

    2014-08-24 22:15:21,714 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Error processing datan ...

  6. Join to domain powershell script

    Join to domain powershell script $username = "domain\admin" $Password = "xxxxxxxx&quo ...

  7. java+ssh+eclipse开发过程问题记录

    原文 http://www.sdfengxi.com/?p=408   最近在忙着的项目是基于cloudstack平台的管理平台,因为CloudStack使用java开发,管理机上已部署好rhel+t ...

  8. HDU2553 N皇后问题---(dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=2553 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在 ...

  9. MySQL 进阶(待发布)

    视图 存储过程 触发器 基本函数

  10. [ python3 ] 基于zabbix 自动生成xlsx监控文档

    准备做一个每周自动的巡检报告,数据来源于zabbix,通过python读取zabbix数据库获取数据并制作成excel表格, 本来打算直接邮件发送到指定邮箱,但是都被SMTP过滤掉了,试过126和QQ ...