洛咕 P3700 [CQOI2017]小Q的表格
洛咕 P3700 [CQOI2017]小Q的表格
神仙题orz
首先推一下给的两个式子中的第二个
\(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\)
先简单的想,\(F(a,a+b)\)和\(F(a,b)\)会相互影响
可以换一种角度想,\(F(a,b-a)\)和\(F(a,b)\)会相互影响\((b>a)\)
那么可以从\(F(x,y)\)一路推下去
\(F(x,y)=F(x,y-x)=F(x,y-2x)=\cdots=F(x,y\mod x)\)
(注意这里的\(\text{mod}\)结果是0的话就没有办法再减了)
这时横坐标比纵坐标大了,利用题目给的式子1,swap横纵坐标
\(F(x,y)=F(x,y\mod x)=F(y\mod x,x)=F(y\mod x,x\mod(y\mod x))=\cdots\)
总结一下,如果继续这样推下去,当横、纵坐标相等时会就不能再减了
刚才是怎么推的呢,就是当x,y不等的时候每次都把x对y取模然后交换x,y
是不是很熟悉,就是求gcd的过程
那么可以推出来,\(\gcd(x,y)\)相等的会相互影响
具体影响多少是显然的,\(F(x,y)=F(\gcd(x,y),\gcd(x,y))\times \frac{xy}{\gcd(x,y)^2}\)
所以只要维护\(F(i,i)\)的值就行了,下面设\(F(i,i)=F(i)\)
现在要算\(\sum_{i=1}^n\sum_{j=1}^nF(i,j)\)
\(ans=\sum_{i=1}^n\sum_{j=1}^nF(\gcd(i,j))\)
考虑枚举\(\gcd(i,j)\),
\(ans=\sum_{k=1}^nF(k)\sum_{i=1}^n\sum_{j=1}^n\frac{ij}{k^2}[\gcd(i,j)=k]\)
\(ans=\sum_{k=1}^nF(k)\sum_{i=1}^{n/k}\sum_{j=1}^{n/k}ij[\gcd(i,j)=1]\)
设\(g(n)=\sum_{i=1}^{n}\sum_{j=1}^{n}ij[\gcd(i,j)=1]\),\(ans=\sum_{k=1}^nF(k)g(n/k)\)
可以只求一半,\(g(n)=2\sum_{i=1}^{n}\sum_{j=1}^{i}ij[\gcd(i,j)=1]-\sum_{i=1}^{n}i^2[\gcd(i,i)=1]\)
右边那一块是显然的
\(g(n)=2\sum_{i=1}^{n}\sum_{j=1}^{i}ij[\gcd(i,j)=1]-1\)
设\(h(n)=\sum_{i=1}^{n}in[gcd(i,n)=1]\),\(g(n)=2\sum_{i=1}^{n}h(i)-1\)
怎么求\(h\)呢,显然可行的\(i\)有\(\varphi(n)\)种,如果\(\gcd(i,n)=1\),那么\(\gcd(n-i,n)=1\)
所以\(i\)和\(n-i\)可以配对,加起来是\(n\),一共\(\varphi(n)/2\)对,\(h(n)=\frac{\varphi(n)\times n^2}{2}\),注意特判\(h(n)=1\),因为不能配对
然后求出了\(h\)就可以求出\(g\),\(F\)每次只会修改一个。要求的\(ans=\sum_{k=1}^nF(k)g(n/k)\)显然\(n/k\)只有根号种取值,数论分块即可,\(F\)树状数组前缀和
#include<bits/stdc++.h>
#define il inline
#define vd void
#define int ll
#define mod 1000000007
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int g[4000010],h[4000010];
int pri[4000010],pr,phi[4000010];
bool yes[4000010];
int n,m,f[4000010];
il vd update(int x,int p){while(x<=n)f[x]=(f[x]+p)%mod,x+=x&-x;}
il int query(int x){int ret=0;while(x)ret=(ret+f[x])%mod,x-=x&-x;return ret;}
signed main(){
m=gi(),n=gi();
int x,y,k,t,G;
for(int i=1;i<=n;++i)update(i,1ll*i*i%mod);
phi[1]=1;
for(int i=2;i<=n;++i){
if(!yes[i])phi[i]=i-1,pri[++pr]=i;
for(int j=1;j<=pr&&i*pri[j]<=n;++j){
yes[i*pri[j]]=1;
if(i%pri[j]==0){
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
for(int i=1;i<=n;++i)h[i]=1ll*phi[i]*i%mod*i%mod;
g[1]=1;
for(int i=2;i<=n;++i)g[i]=(g[i-1]+h[i])%mod;
while(m--){
x=gi(),y=gi();G=std::__gcd(x,y);
t=(gi()/(x/G)/(y/G))%mod;
update(G,(0ll+t-query(G)+query(G-1)+mod)%mod);
k=gi();
int ans=0;
for(int i=1;i<=k;++i){
int j=k/(k/i);
ans=(ans+1ll*(query(j)-query(i-1)+mod)*g[k/i])%mod;
i=j;
}
printf("%lld\n",ans);
}
return 0;
}
洛咕 P3700 [CQOI2017]小Q的表格的更多相关文章
- [bzoj4815] [洛谷P3700] [Cqoi2017] 小Q的表格
Description 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理. 每当小Q不知道如何解决时,就只好向你求助.为了完成任务,小Q需要列一个表格 ...
- 洛谷 P3700 - [CQOI2017]小Q的表格(找性质+数论)
洛谷题面传送门 又是一道需要一些观察的数论 hot tea-- 注意到题目中 \(b·f(a,a+b)=(a+b)·f(a,b)\) 这个柿子长得有点像求解 \(\gcd\) 的辗转相除法,因此考虑从 ...
- 【BZOJ4815】[CQOI2017]小Q的表格(莫比乌斯反演,分块)
[BZOJ4815][CQOI2017]小Q的表格(莫比乌斯反演,分块) 题面 BZOJ 洛谷 题解 神仙题啊. 首先\(f(a,b)=f(b,a)\)告诉我们矩阵只要算一半就好了. 接下来是\(b* ...
- 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的表格(莫比乌斯反演)
4815: [Cqoi2017]小Q的表格 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 832 Solved: 342[Submit][Statu ...
- 洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
P3698 [CQOI2017]小Q的棋盘 题目描述 小 Q 正在设计一种棋类游戏. 在小 Q 设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上 ...
- [bzoj4815]: [Cqoi2017]小Q的表格
来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. ...
- [CQOI2017]小Q的表格(数论+分块)
题目描述 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. 为了完成任务,小Q需要列一个表格,表格有无穷多 ...
- bzoj 4815: [Cqoi2017]小Q的表格【欧拉函数+分块】
参考:http://blog.csdn.net/qq_33229466/article/details/70174227 看这个等式的形式就像高精gcd嘛-所以随便算一下就发现每次修改(a,b)影响到 ...
随机推荐
- Django 自定义表
1.Django自带的用户表 create table auth_user ( id int auto_increment primary key, password varchar(128) not ...
- ssh免秘钥配置
1.要求:两台相同的系统,这里设置server1控制server2的服务器 2.先在两台服务器上都安装好ssh 输入命令下载: yum install -y openssh-clients opens ...
- php编译安装 报错 make ***[libphp5.la] Error 1解决方法
报错信息: /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] Err ...
- 准备好要上传到 Azure 的 Windows VHD 或 VHDX
在将 Windows 虚拟机 (VM) 从本地上传到 Azure 之前,必须准备好虚拟硬盘(VHD 或 VHDX). Azure 仅支持采用 VHD 文件格式且具有固定大小磁盘的第 1 代 VM. V ...
- Oracle EBS GL 总账日记账打开报错此职责无可用函数
系统管理员下,跑请求:
- 大话存储 3 - 七种磁盘RAID技术
RAID技术 Redundant Array of Independent Disks 由独立的磁盘组成的具有冗余特性的阵列. 有两个特性: 阵列:需要很多磁盘来组成 冗余:允许某块磁盘损坏之后,数据 ...
- SmartUpload相关类的说明
㈠ File类 这个类包装了一个上传文件的所有信息.通过它,可以得到上传文件的文件名.文件大小.扩展名.文件数据等信息. File类主要提供以下方法: 1.saveAs作用:将文件换名另存. 原型: ...
- leetcode 486 预测赢家
题目描述 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,--.每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到没 ...
- C#中的事件(event)处理机制
委托 语法 [访问修饰符] delegate 返回类型 委托名(); 委托的特点 类似于C++函数指针,但它是类型安全的:委托允许将方法作为参数进行传递:委托可用于定义回调方法:委托可以链接在一起:如 ...
- 2.HBase In Action 第一章-HBase简介(1.1数据管理系统:快速学习)
Relational database systems have been around for a few decades and have been hugely successful in so ...