传送门

可以理解为上一道题的扩展板..

然后我们就可以YY出这样一个式子

${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)=\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^c[gcd(i,j)=gcd(i,k)=gcd(j,k)=1]\lfloor\frac{a}{i}\rfloor\lfloor\frac{b}{j}\rfloor\lfloor\frac{c}{k}\rfloor}$

然后我们枚举第一维,排除掉不和第一维互质的数大力反演就OK啦。

这里介绍另一种很神奇(麻烦)方法,当然这个和反演的关系就没那么大了:

首先设$f(k)=\sum\limits_{i=1}^{a}\sum\limits_{j=1}^{b}[k=i \times j]$

然后得到$ans=\sum\limits_{i=1}^{a\times b} f(i)\sum\limits_{j=1}{d(i \times j)}$

$ans=\sum\limits_{i=1}^{a\times b} f(i)\sum\limits_{j=1}^{c}{d(i \times j)}$
$ans=\sum_{i=1}^{ab}f(i)\sum_{j=1}^c\sum_{u|i}\sum_{v|j}[gcd(u,v)=1]$
$ans=\sum\limits_{i=1}^{a\times b}\sum\limits_{j=1}^{c}[gcd(i,j)=1]\sum\limits_{u=1}^{\frac{a\times b}{i}}f(u\times i)\lfloor \frac{c}{j}\rfloor$

不妨设$S(i)=\sum\limits_{u=1}^{\frac{a\times b}{i}}f(u\times i)$

得到:

$ans=\sum\limits_{i=1}^{a\times b}\sum\limits_{j=1}^{c}[gcd(i,j)=1]S(i)\lfloor \frac{c}{j}\rfloor$

$ans=\sum\limits_{i=1}^{a\times b}\sum\limits_{j=1}^{c}\sum\limits_{d|gcd(i,j)}\mu(d)S(i)\lfloor \frac{c}{j}\rfloor$

不妨设$Q(k)=\sum\limits_{i=1}^{k}\lfloor \frac{k}{i} \rfloor$

得到:

$ans=\sum\limits_{i=1}^{c}\mu(i)\sum\limits_{j=1}^{\frac{a\times b}{i}}S(i\times j)\sum\limits_{k=1}^{\frac{c}{i}}Q(k)$

不妨设$P(k)=\sum\limits_{i=1}^{\frac{a\times b}{k}}S(i\times k)$

最后得到$ans=\sum\limits_{i=1}^{c}\mu(i)P(i)Q(i)$

大力预处理即可。

//CF235E
//by Cydiater
//2017.2.22
#include <iostream>
#include <queue>
#include <map>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <iomanip>
#include <algorithm>
#include <bitset>
#include <set>
#include <vector>
#include <complex>
using namespace std;
#define ll int
#define up(i,j,n)	for(ll i=j;i<=n;i++)
#define down(i,j,n)	for(ll i=j;i>=n;i--)
#define cmax(a,b)	a=max(a,b)
#define cmin(a,b)	a=min(a,b)
const ll MAXN=4e6+5;
const ll mod=1073741824;
inline ll read(){
	char ch=getchar();ll x=0,f=1;
	while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
ll A,B,C,AB,prime[MAXN],P[MAXN],S[MAXN],f[MAXN],Q[MAXN],miu[MAXN],cnt;
bool vis[MAXN];
namespace solution{
	void Prepare(){
		A=read();B=read();C=read();AB=A*B;
		miu[1]=1;
		up(i,2,C){
			if(!vis[i]){prime[++cnt]=i;miu[i]=-1;}
			up(j,1,cnt){
				if(i*prime[j]>C)break;
				vis[i*prime[j]]=1;
				if(i%prime[j])miu[i*prime[j]]=-miu[i];
				else break;
			}
		}
		up(i,1,A)up(j,1,B)f[i*j]++;
		up(i,1,AB)for(ll j=i;j<=AB;j+=i)
			(S[i]+=f[j])%=mod;
		up(i,1,AB)for(ll j=i;j<=AB;j+=i)
			(P[i]+=S[j])%=mod;
		ll pos;
		up(i,1,C){
			for(ll j=1;j<=i;j=pos+1){
				pos=i/(i/j);
				Q[i]+=(pos-j+1)*(i/j);
				(Q[i]+=mod)%=mod;
			}
		}
	}
	void Solve(){
		ll ans=0;
		up(i,1,C){
			(ans+=miu[i]*P[i]*Q[C/i])%=mod;
			(ans+=mod)%=mod;
		}
		cout<<ans<<endl;
	}
}
int main(){
	//freopen("input.in","r",stdin);
	using namespace solution;
	Prepare();
	Solve();
	//cout<<"Time has passed:"<<1.0*clock()/1000<<"s!"<<endl;
	return 0;
}

CF#235E. 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. Codeforces 235E Number Challenge

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

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

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

  4. 『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 ...

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

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

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

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

  7. 【codeforces 235E】 Number Challenge

    http://codeforces.com/problemset/problem/235/E (题目链接) 题意 给出${a,b,c}$,求${\sum_{i=1}^a\sum_{j=1}^b\sum ...

  8. 洛谷 P3327 [SDOI2015]约数个数和 || Number Challenge Codeforces - 235E

    https://www.luogu.org/problemnew/show/P3327 不会做. 去搜题解...为什么题解都用了一个奇怪的公式?太奇怪了啊... 公式是这样的: $d(xy)=\sum ...

  9. CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)

    1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort    暴力枚举,水 1.题意:n*m的数组, ...

随机推荐

  1. 【问题收录】Ubuntu14.04连接两个双显示器失败的解决方案

    https://blog.csdn.net/chichoxian/article/details/60642533

  2. Number Sequence--POJ1019

    Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 35251   Accepted: 10151 ...

  3. ubuntu16.4中安装samba服务

    一.下载samba软件包,不用安装其他的了,因为它会自动帮我们下载所需要的其他依赖包 sudo apt-get install samba 二.修改/etc/samba目录下的配置文件,smb.con ...

  4. python 全局变量引用与修改

    一.引用 使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字.如: #! /usr/bin/python a = 1 b = [2, 3] def func(): if ...

  5. 获取图片的大小(宽高):BytesIO

    获取图片的大小(宽高) from io import BytesIO,StringIO import requests from PIL import Image img_url = "ht ...

  6. 换个字体解决Dreamweaver文字选不中的问题

    在使用Dreamweaver时,有时我们要选中一些字符进行编辑或删除,光标在英文字上面可以选中,在中文字上面就选不中,郁闷吧.比如在编辑下面这段文字的时候,如图所示, 想选中“你难得已经忘了吗?”,当 ...

  7. CSS表格(未完成)

    CSS 表格 使用 CSS 可以使 HTML 表格更美观. 表格边框 指定CSS表格边框,使用border属性. 下面的例子指定了一个表格的Th和TD元素的黑色边框:

  8. SVN出现xcrun: error: invalid active developer path(Mac)

    Mac升级了系统,配置PHPStorm的SVN,出现如下错误: 具体提示的内容是:xcrun: error: invalid active developer path (/Library/Devel ...

  9. POJ3169:Layout(差分约束)

    http://poj.org/problem?id=3169 题意: 一堆牛在一条直线上按编号站队,在同一位置可以有多头牛并列站在一起,但编号小的牛所占的位置不能超过编号大的牛所占的位置,这里用d[i ...

  10. Andrew Ng-ML-第十五章-降维

    1.数据压缩 数据压缩不仅能够减小存储空间,并且能够加速学习算法.那么什么是数据压缩呢?下面给出了一个简单的例子: 图1.数据压缩的概念 举了两个例子,一个是横轴x1是厘米,纵轴特征x2是英尺,这明显 ...