CF#235E. Number Challenge
可以理解为上一道题的扩展板..
然后我们就可以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的更多相关文章
- 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 ...
- Codeforces 235E Number Challenge
http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...
- CodeForces 235E Number Challenge (莫比乌斯反演)
题意:求,其中d(x) 表示 x 的约数个数. 析:其实是一个公式题,要知道一个结论 知道这个结论就好办了. 然后就可以解决这个问题了,优化就是记忆化gcd. 代码如下: #pragma commen ...
- 『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 ...
- Easy Number Challenge(暴力,求因子个数)
Easy Number Challenge Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I ...
- Java实现 蓝桥杯 算法训练 Number Challenge(暴力)
试题 算法训练 Number Challenge 资源限制 时间限制:3.0s 内存限制:512.0MB 问题描述 定义d(n)为n的约数个数.现在,你有三个数a,b,c.你的任务是计算下面式子mod ...
- 【codeforces 235E】 Number Challenge
http://codeforces.com/problemset/problem/235/E (题目链接) 题意 给出${a,b,c}$,求${\sum_{i=1}^a\sum_{j=1}^b\sum ...
- 洛谷 P3327 [SDOI2015]约数个数和 || Number Challenge Codeforces - 235E
https://www.luogu.org/problemnew/show/P3327 不会做. 去搜题解...为什么题解都用了一个奇怪的公式?太奇怪了啊... 公式是这样的: $d(xy)=\sum ...
- 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的数组, ...
随机推荐
- SequenceFile实例操作
HDFS API提供了一种二进制文件支持,直接将<key,value>对序列化到文件中,该文件格式是不能直接查看的,可以通过hadoop dfs -text命令查看,后面跟上Sequen ...
- Oracle字符串连接的方法
Oracle数据库中,使用“||”进行字符串连接,下面就让我们一起了解一下Oracle数据库中字符串连接的方法,希望对您能有所帮助. 和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串 ...
- What is Gensim?
Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达.它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法, ...
- 得到scp命令的完整路径
奇怪的crontab 遇上shell scp不执行了-CSDN论坛 https://bbs.csdn.net/topics/390593780
- Python面试基础篇
1. 为什什么学习Python? Life is short, You need Python 2. 通过什什么途径学习的Python? pass 3. Python和Java.PHP.C.C#.C+ ...
- 第四课:通过配置文件获取对象(Spring框架中的IOC和DI的底层就是基于这样的机制)
首先在D盘创建一个文件hero.txt,内容为:com.hero.Hero(此处必须是Hero的完整路径) 接下来是Hero类 package com.hero; public class Hero ...
- 关于微信小程序,你想知道的他们都问了
微信公开课深圳站小程序专场刚刚结束,大家通过"微信公开课+"互动小程序提出了许多问题.我们筛选了后台问得最多的九个问题进行解答,快来看看这里有没有你想要的答案吧! @谢杨:小程序是 ...
- webapi swagger学习笔记
版权声明:部分摘抄其他博主朋友的博文内容,旨在分享学习,如给您带来不便,请原谅.原文地址 http://www.cnblogs.com/yanweidie/p/5709113.html#_label3 ...
- Perl的debug小技巧
进入Perl的调试环境的命令: Perl -d perl_file 设置断点:b + perl代码中的行号. 执行到断点:c 表示continue until breakpoint. 执行下一条 ...
- How To View the HTML Source in Google Chrome
Whether you are new to the web industry or a seasoned veteran, viewing the HTML source of different ...