洛谷 P3455 [POI2007]ZAP-Queries || 洛谷P2522,bzoj2301
2024-08-30 13:16:34
https://www.luogu.org/problemnew/show/P3455
就是https://www.cnblogs.com/hehe54321/p/9315244.html里面的方法2了,升级版的整除分块,可以两个变量一起搞
预处理莫比乌斯函数的前缀和之后就可以每次$O(\sqrt{n}+\sqrt{m})$回答
那篇题解里面用了一个技巧:${\lfloor}\frac{{\lfloor}\frac{a}{b}{\rfloor}}{c}{\rfloor}={\lfloor}\frac{a}{bc}{\rfloor}$
(当然a,b,c都为正整数)
证了好久。。。
这么证:
设${\lfloor}\frac{a}{bc}{\rfloor}=p$,则p为整数,且$p<=\frac{a}{bc}<p+1$
则$pc<=\frac{a}{b}<pc+c$
而$pc$与$pc+c$都为整数
因此$pc<={\lfloor}\frac{a}{b}{\rfloor}<pc+c$
所以$p<=\frac{{\lfloor}\frac{a}{b}{\rfloor}}{c}<p+1$
所以${\lfloor}\frac{{\lfloor}\frac{a}{b}{\rfloor}}{c}{\rfloor}=p={\lfloor}\frac{a}{bc}{\rfloor}$
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define N 50100
ll prime[N+],len,mu[N+],dd[N+];
bool nprime[N+];
ll a,c,n,m,k,ans,ed;
int main()
{
ll i,j,T,TT;
mu[]=;
for(i=;i<=N;i++)
{
if(!nprime[i]) prime[++len]=i,mu[i]=-;
for(j=;j<=len&&i*prime[j]<=N;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==) {mu[i*prime[j]]=;break;}
else mu[i*prime[j]]=-mu[i];
}
}
for(i=;i<=N;i++) dd[i]=dd[i-]+mu[i];
scanf("%lld",&T);
for(TT=;TT<=T;TT++)
{
scanf("%lld%lld%lld",&n,&m,&k);n/=k;m/=k;
ans=;
if(n>m) swap(n,m);
for(i=;i<=n;i=j+)
{
j=min(n,min(n/(n/i),m/(m/i)));
ans+=(dd[j]-dd[i-])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return ;
}
https://www.luogu.org/problemnew/show/P2522
https://www.lydsy.com/JudgeOnline/problem.php?id=2301
这题基本一样的,就是加个容斥。。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define N 50100
ll prime[N+],len,mu[N+],dd[N+];
bool nprime[N+];
ll a,c,n,m,k;
ll calc(ll n,ll m)
{
if(n==||m==) return ;
ll ans=;
if(n>m) swap(n,m);
n/=k;m/=k;
for(ll i=,j;i<=n;i=j+)
{
j=min(n,min(n/(n/i),m/(m/i)));
ans+=(dd[j]-dd[i-])*(n/i)*(m/i);
}
return ans;
}
int main()
{
ll i,j,T,TT;
mu[]=;
for(i=;i<=N;i++)
{
if(!nprime[i]) prime[++len]=i,mu[i]=-;
for(j=;j<=len&&i*prime[j]<=N;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==) {mu[i*prime[j]]=;break;}
else mu[i*prime[j]]=-mu[i];
}
}
for(i=;i<=N;i++) dd[i]=dd[i-]+mu[i];
scanf("%lld",&T);
for(TT=;TT<=T;TT++)
{
scanf("%lld%lld%lld%lld%lld",&a,&n,&c,&m,&k);
printf("%lld\n",calc(n,m)-calc(a-,m)-calc(n,c-)+calc(a-,c-));
}
return ;
}
最新文章
- Oracle 环境变量NLS_LANG
- libsvm数据处理初略流程
- 剑指Offer面试题:24.复杂链表的复制
- MongoDB的导入导出(7)
- 如何用Linux的命令正确识别cpu的个数和核数【转】
- eBay_GTC和Relist
- OC3_dealloc
- 【暑假】[实用数据结构] AC自动机
- [Hapi.js] POST and PUT request payloads
- css3的loadding效果
- 通过tokenPlease()函数获取accessToken
- hdu 5476 (计算几何)
- Android性能优化之常见的内存泄漏
- Java自学教程视频
- 2018-2019-2 20165234 《网络对抗技术》 Exp1 PC平台逆向破解
- C#从SqlServer数据库读写文件源码
- Adobe Premiere Pro生成峰值文件假死
- Django-debug-toolbar的使用
- 《HTTP - http报文》
- PHP遍历一个文件夹下所有文件和子文件夹的函数
热门文章
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part V
- iOS UILabel换行同时修改字体大小颜色
- Snail—iOS网络学习之得到网络上的数据
- iOS 各种编译错误汇总
- bash shell parameter expansion
- gRPC错误码 http状态码 provide your APIs in both gRPC and RESTful style at the same time
- mysql优化----explain的列分析
- html5--6-11 CSS选择器7--伪类选择器
- 让th里面的东西自动换行
- Tomcat版本是32位、64位问题