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 ...
随机推荐
- javascript中apply和call的区别
请补充 136页 pdf 高级javascript设计
- Meeting-in-the-Middle (LA 2965)
Meeting-in-the-Middle,又称“中途相遇法”.准确地说,它只是一种策略. 顺便说一下,这个算法真的很冷门! 结合这道题来讨论一下吧:LA 2965.ε(┬┬﹏┬┬)3 因为博主的英文 ...
- 我的Android进阶之旅------>如何为ListView组件加上快速滑块以及修改快速滑块图像
使用布局文件需要将android:fastScrollEnabled="true" ,如下代码所示: <ListView android:id="@+id/list ...
- Jquery 动态添加option 并给option添加数据,并帮定事件
//添加下拉框 function append_add(data) { $('#add').append( '<div class="form-group" id='+for ...
- iOS uitableViewCell 选中 push后返回 取消选中状态
首先我有一个UITableViewController,其中每个UITableViewCell点击后都会push另一个 ViewController,每次点击Cell的时候,Cell都会被选中,当从p ...
- 【leetcode刷题笔记】Combination Sum II
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- Netty使用LineBasedFrameDecoder解决TCP粘包/拆包
TCP粘包/拆包 TCP是个”流”协议,所谓流,就是没有界限的一串数据.TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TC ...
- neutron VPC
The goal of this document is to provide an umbrella blueprint defining how to add support for VPC in ...
- mysql 使用过程中出现问题
1. mysql_front连接报错,sql执行错误#3167的解决方案 提示:The 'INFORMATION_SCHEMA.SESSION_VARIABLES' feature is disabl ...
- Linux课程---9、安装RPM包(RPM的全称是什么)
Linux课程---9.安装RPM包(RPM的全称是什么) 一.总结 一句话总结: redhat package management 1.在Packages中查找和php相关的文件如何查找? ls ...