bzoj 4815 小Q的表格 —— 反演+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4815
思路就和这里一样:https://blog.csdn.net/leolyun/article/details/70146612
不知为何乘逆元就错了,必须直接除...不过题目保证了是整数,所以直接除也没问题;
然后重新学习了一下分块的简洁写法,就能A了hhh
代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const xn=4e6+,mod=1e9+,base=,xb=;
int n,cnt,pri[xn],phi[xn],g[xn],blk[xn],s[xn],pls[xb];
bool vis[xn];
ll rd()
{
ll ret=,f=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return f?ret:-ret;
}
ll pw(ll a,int b)
{
ll ret=;
for(;b;b>>=,a=(a*a)%mod)if(b&)ret=(ret*a)%mod;
return ret;
}
int upt(int x){while(x>=mod)x-=mod; while(x<)x+=mod; return x;}
void init()
{
phi[]=;
for(int i=;i<=n;i++)
{
if(!vis[i])pri[++cnt]=i,phi[i]=i-;
for(int j=;j<=cnt&&(ll)i*pri[j]<=n;j++)
{
vis[i*pri[j]]=;
if(i%pri[j])phi[i*pri[j]]=(ll)phi[i]*(pri[j]-)%mod;
else {phi[i*pri[j]]=(ll)phi[i]*pri[j]%mod; break;}
}
}
for(int i=;i<=n;i++)g[i]=(ll)i*i%mod*phi[i]%mod;
for(int i=;i<=n;i++)g[i]=upt(g[i-]+g[i]);
}
void init2()
{
for(int i=;i<=n;i++)blk[i]=(i-)/base+;
for(int i=;i<=n;i++)s[i]=(s[i-]+(ll)i*i)%mod;
}
void change(int d,ll x)//add x
{
for(int i=d;blk[i]==blk[d]&&i<=n;i++)s[i]=upt(s[i]+x);
for(int i=blk[d]+;i<=blk[n];i++)pls[i]=upt(pls[i]+x);
}
int cal(int ps)
{
return upt(pls[blk[ps]]+s[ps]);
}
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int main()
{
int m=rd(); n=rd();
init(); init2(); ll x;
for(int i=,a,b,k;i<=m;i++)
{
a=rd(); b=rd(); x=rd(); k=rd();
int d=gcd(a,b);
//int t1=(ll)d*pw(a,mod-2)%mod,t2=(ll)d*pw(b,mod-2)%mod;
ll t=((ll)a/d)*(b/d); x=(x/t)%mod;//
change(d,upt(x-cal(d)+cal(d-)));
//change(d,x*t1%mod*t2%mod);
int ans=;
for(int j=,nxt;j<=k;j=nxt+)
{
nxt=k/(k/j);
ans=(ans+(ll)g[k/j]*upt(cal(nxt)-cal(j-)))%mod;
}
printf("%d\n",ans);
}
return ;
}
bzoj 4815 小Q的表格 —— 反演+分块的更多相关文章
- bzoj 4815 [Cqoi2017]小Q的表格——反演+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4815 大概就是推式子的时候注意有两个边界都是 n ,考虑变成 2*... 之类的. 分块维护 ...
- [CQOI2017]小Q的表格(数论+分块)
题目描述 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. 为了完成任务,小Q需要列一个表格,表格有无穷多 ...
- [BZOJ4815][CQOI2017]小Q的表格 数论+分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4815 题目中所给条件中的$(a,a+b)$和$(a,b)$的关系很瞩目. 然后大家都知道$ ...
- [CQOI2017]小Q的表格——反演好题
zhoutb2333的题解 难得一见的新颖反演题. 一眼看可能不是反演题. 修改影响别的,很恶心. 所以考虑化简f的联系式,发现和gcd有关 于是考虑用gcd来表示所有的gcd(a,b)=g的所有f( ...
- bzoj 4815: [Cqoi2017]小Q的表格 [数论]
4815: [Cqoi2017]小Q的表格 题意: 单点修改,查询前缀正方形和.修改后要求满足条件f(a,b)=f(b,a), b×f(a,a+b)=(a+b)*f(a,b) 一开始sb了认为一次只会 ...
- 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)
[BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...
- [BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演)
4815: [Cqoi2017]小Q的表格 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 832 Solved: 342[Submit][Statu ...
- 【CQOI2017】小Q的表格
[CQOI2017]小Q的表格 稍加推导就会发现\(f(a,b)=a\cdot b\cdot h(gcd(a,b))\). 初始时\(h(n)=1\). 询问前\(k\)行\(k\)列时我们就反演: ...
- 洛咕 P3700 [CQOI2017]小Q的表格
洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...
随机推荐
- The hidden layers are either convolutional, pooling or fully connected.
https://en.wikipedia.org/wiki/Convolutional_neural_network Convolutional layers apply a convolution ...
- Python菜鸟之路:Python基础-Python操作RabbitMQ
RabbitMQ简介 rabbitmq中文翻译的话,主要还是mq字母上:Message Queue,即消息队列的意思.rabbitmq服务类似于mysql.apache服务,只是提供的功能不一样.ra ...
- 洛谷2704 [NOI2001]炮兵阵地
题目戳这里 Solution 状压DP很好的入门题,用熟练位运算貌似也没那么难. 首先分析一下题目: 看见n=100,m=10,立马就想到了状压,看起来也像DP,所以我们还是采用行号为阶段的状压DP. ...
- MyBatis -- 一步步教你使用MyBatis
1.建立开发环境 1.1 创建项目,java项目或者javaweb项目均可,如图: 1.2 加入所须要的jar包到项目lib文件夹下 一个MyBatis-3.2.4.jar包 一个驱动包mysql ...
- goland中引用包
首先在工程目录下新建三个目录:bin, pkg,src Bin文件夹是放置编译后的exe文件 Pkg文件夹是放置包生成后的.a文件 Src文件夹是放置包文件的地方 工程组织目录如下,在src中有tes ...
- centos下安装pip时失败:
[root@wfm ~]# yum -y install pipLoaded plugins: fastestmirror, refresh-packagekit, securityLoading m ...
- SAP HR 复制PA30的人员
[转自http://www.512test.com/home/space.php?uid=19&do=blog&id=2381] 很多顾问测试HR的程序时都为录入人员头痛,下面的程序提 ...
- rtpdataheader.h
#ifndef RTPDATAHEADER_H #define RTPDATAHEADER_H // For 32bit intel machines typedef short int16; typ ...
- Windows存储管理之磁盘类型简介
各种操作系统连接到存储系统之后,并且操作系统识别物理磁盘之后,需要对磁盘进行进一步配置.如果用户连接存储是的Windows Server,存储管理员势必需要了解Windows中的磁盘类型与文件系统.笔 ...
- sql获取数组长度
需求:获取字符串数组1,2,3,4的长度,当然也可以是其他分隔符1|2|3等 方法:通过自定义函数来实现 /* 获取字符串数组长度 */ from sysobjects where id = obje ...