【题解】Zap(莫比乌斯反演)

裸题...

直接化吧

[P3455 POI2007]ZAP-Queries

所有除法默认向下取整

\[\Sigma_{i=1}^x\Sigma_{j=1}^y[(i,j)=k]
\\
=\Sigma_{i=1}^{x/k}\Sigma_{j=1}^{y/k}[(i,j)=1]
\\
=\Sigma_{i=1}^{x/k}\Sigma_{j=1}^{y/k}\Sigma_{d|(i,j)}\mu(d)
\\
=\Sigma_{d=1}^{min(x,y)}\Sigma_{i=1}^{x/k}\Sigma_{j=1}^{y/k}\mu(d)\times[d|(i,j)]
\\
=\Sigma_{d=1}^{min(x,y)}(\frac x {dk})(\frac y {dk})\mu(d)
\]

整除分块直接做...

有一个细节,可能有疑惑:

		r=min(x/(x/l),y/(y/l));
ans+=1ll*(x/(l*k))*(y/((l*k)))*(sum[r]-sum[l-1]);

整除分块为什么是这样的?为什么r=min(x/(x/l),y/(y/l));中的"\(l\)"和ans+=1ll*(x/(l*k))*(y/((l*k)))*(sum[r]-sum[l-1]);不统一,为什么是(x/(l*k))*(y/(l*k))?这不是整除分块正常的套路啊?

可以这样理解,整除分块利用了\(\lfloor \frac x l \rfloor\)在一定范围内不变的性质,所以我们同样也会有\(\lfloor\frac {\lfloor \frac x l \rfloor} k\rfloor\)在一定范围内不变化,并且前面那个式子包括的\(l\)的范围一定小于后面的那个\(l\)的范围,所以我们按照\(\lfloor \frac x l \rfloor\)整除分块即可。

至于如何按照\(\lfloor\frac {\lfloor \frac x l \rfloor} k\rfloor=\lfloor \frac x {lk} \rfloor\)分块,我也不知道怎么办,希望有高手指点一下QAQ

#include<bits/stdc++.h>

using namespace std;typedef long long ll;
template < class ccf >
inline ccf qr(ccf b){
register char c=getchar();register int q=1;register ccf x=0;
while(c<48||c>57)q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
return q==-1?-x:x;}
inline int qr(){return qr(1);}
const int maxn=1e5+5;
bool usd[maxn];
int mu[maxn];
int sum[maxn];
vector < int > ve;
int x,y,k;
#define pb push_back
inline void gen(){
mu[1]=sum[1]=usd[1]=1;
for(register int t=2;t< maxn;++t){
if(not usd[t])
ve.pb(t),mu[t]=-1;
for(register auto p:ve)
if(1ll*p*t<maxn)
if(usd[p*t]=1,t%p) mu[p*t]=-mu[t];
else break;
else break;
sum[t]=sum[t-1]+mu[t];
}
} int main(){
gen();
int T=qr();
while(T--){
x=qr();y=qr();k=qr();
ll ans=0;
for(register int l=1,r=0,edd=min(x,y)/k;l<=edd;l=r+1){
r=min(x/(x/l),y/(y/l));
ans+=1ll*(x/(l*k))*(y/((l*k)))*(sum[r]-sum[l-1]);
}
cout<<ans<<endl;
}
return 0;
}

【题解】Zap(莫比乌斯反演)的更多相关文章

  1. BZOJ1101: [POI2007]Zap(莫比乌斯反演)

    1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2951  Solved: 1293[Submit][Status ...

  2. Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 莫比乌斯反演 1101: [POI2007]Zap 设 \(f(i)\) 表示 \(( ...

  3. 【BZOJ1101】Zap [莫比乌斯反演]

    Zap Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Description 对于给定的整数a,b和d,有多少正整 ...

  4. 1101: [POI2007]Zap(莫比乌斯反演)

    1101: [POI2007]Zap Time Limit: 10 Sec Memory Limit: 162 MB Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定 ...

  5. bzoj 1101 Zap —— 莫比乌斯反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 直接莫比乌斯反演. 代码如下: #include<cstdio> #inc ...

  6. BZOJ 1101 Luogu P3455 POI 2007 Zap (莫比乌斯反演+数论分块)

    手动博客搬家: 本文发表于20171216 13:34:20, 原地址https://blog.csdn.net/suncongbo/article/details/78819470 URL: (Lu ...

  7. CF1139D Steps to One 题解【莫比乌斯反演】【枚举】【DP】

    反演套 DP 的好题(不用反演貌似也能做 Description Vivek initially has an empty array \(a\) and some integer constant ...

  8. BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )

    求 answer = ∑ [gcd(x, y) = d] (1 <= x <= a, 1 <= y <= b) . 令a' = a / d, b' = b / d, 化简一下得 ...

  9. BZOJ 1101 Zap(莫比乌斯反演)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1101 给定a,b,d,求有多少gcd(x,y)==d(1<=x<=a&& ...

随机推荐

  1. Fiddler-常用技巧

    1.详情面板 1).Inspectors 标签栏进行请求和响应结果分析 2).AutoResponder 对匹配 URL 进行自动返回, 可以使用字符.URL.正则表达式 3).Composer 模拟 ...

  2. Parallel小记

    List<Temp> tList = new List<Temp>(); ; i < ; i++) { tList.Add(new Temp() { id = i, na ...

  3. ibatis常用的集中判断语句

    http://blog.csdn.net/liaomin416100569/article/details/5344483

  4. Linux tomcat安装详解(未完)

    转: http://blog.csdn.net/lcyaiym/article/details/76696192

  5. the method getcontextpath() from the type httpservletrequest refers to the missing type string

    导入项目的时候容易报出这个错误,主要因为JRE(jdk版本不一致). 解决方法:就是重新配置路径,配置你机器上安装的jdk. 右击该出错项目→ Build Path → Configure Build ...

  6. Unity Tiling和offset的使用

    offset是显示框的偏移量 1)拿flappy bird素材来说,起始状态是这种↓. 注意显示框(黄色).它包含的范围是这种↓ 2)当offset_x设置为0.5的时候,显示框(黄色)包含的范围应该 ...

  7. Proving NP-completeness

    Proving NP-completeness by generalization. For each of the problems below, prove that it is NP-compl ...

  8. plsql programming 08 字符串

    一般, char 和 nchar 类型很少使用. 建议使用 varchar2 和 nvarchar2, 其中( n 开头的是国家字符集, 没有n开头的是数据库字符集 ) 一般也不怎么使用国家字符集 v ...

  9. EXCEL VBA代码,实现点击Sheet1按钮控件保存不连续单元格的数据到Sheet2中,然后清空输入内容

    Private Sub SaveAndClear() Dim Header, Deatil, Order As Range Dim lastrow1, lastrow2 As Long Dim i A ...

  10. 目标检测之线段检测---lsd line segment detector

    (1)线段检测应用背景 (2)线段检测原理简介 (3)线段检测实例 a line segment detector (4)hough 变换和 lsd 的区别 --------------------- ...