今年的重庆省选?

具体就是,对于每次修改,A[p,q]这个位置,  设d=gcd(p,q) ,则 gcd为d的每一个格子都会被修改,且他们之间有个不变的联系

A[p,q]/p/q==A[k,t]/k/t   所以只要记录对于gcd为d的所有格子,只要保存A[d][d]的值就可以了。

那么求前k行k列的值ans,则所有gcd(p,q)==d的A[p,q]对答案的贡献就是    {

      设k'=k/d;  (下取整)  f[k']*A[p,q]/(p/d)/(q/d)

}

首先有个基本结论(当n>1时):

( 若x与n互质,则n-x也与n互质 →  与n互质的数的平均数是n/2)

然后推得   f[n]=

代码如下:【BZOJ里最短了吧。。跑的也挺快】

 #include <bits/stdc++.h>
#define LL long long
using namespace std;
const LL mo=;
int S,n,m,k,t,p,q,a[],f[],op[][];
LL d,x,ans;
int gcd(int x,int y){ return y?gcd(y,x%y):x;}
int main(){
scanf("%d%d",&m,&n); f[]=;
for (int i=;i<=n;++i){
if (!a[i]) a[++t]=i,f[i]=i-;
for (int j=;j<=t;++j){
x=a[j]*i; if (x>n) break; a[x]=;
if (!(i%a[j])) {f[x]=f[i]*a[j]; break; }else f[x]=f[i]*f[a[j]];
}
}
for (int i=;i<=n;++i) f[i]=((LL)i*i%mo*f[i]+f[i-])%mo;
for (int i=;i<=m;++i){
scanf("%d%d%lld%d",&p,&q,&x,&k);
d=gcd(p,q); p/=d; q/=d;
op[i][]=d; op[i][]=(x/p/q-d*d)%mo;
if (op[i][]<) op[i][]+=mo;
ans=(LL)(+k)*k/%mo;
ans=ans*ans%mo;
for (int j=;j<=i;++j)
if (op[j][]){
if (j!=i&&op[j][]==d){ op[j][]=; continue;}
ans+=(LL)f[k/op[j][]]*op[j][]%mo;
if (ans>=mo) ans-=mo;
}
printf("%lld\n",ans);
}
return ;
}

杀老师

然后附 查了一个下午的 智障错误。。

看第21行。x/p/q-d*d, 原来这个d是不开LL的。然而 d*d可能会爆int 所以,以前一直下意识的以为只要表达式把(LL)x放最前面 后面就会自动转成LL了 。现在看来是要留个心眼了。。

BZOJ 4815 数论的更多相关文章

  1. bzoj 4815: [Cqoi2017]小Q的表格 [数论]

    4815: [Cqoi2017]小Q的表格 题意: 单点修改,查询前缀正方形和.修改后要求满足条件f(a,b)=f(b,a), b×f(a,a+b)=(a+b)*f(a,b) 一开始sb了认为一次只会 ...

  2. bzoj 4815 [Cqoi2017]小Q的表格——反演+分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4815 大概就是推式子的时候注意有两个边界都是 n ,考虑变成 2*... 之类的. 分块维护 ...

  3. BZOJ 4815 CQOI2017 小Q的表格 欧拉函数+分块

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4815 题意概述:要认真概述的话这个题就出来了... 分析: 首先分析题目,认真研究一下修 ...

  4. bzoj 4815 小Q的表格 —— 反演+分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4815 思路就和这里一样:https://blog.csdn.net/leolyun/arti ...

  5. BZOJ 2219 数论之神 (CRT推论+BSGS+原根指标)

    看了Po神的题解一下子就懂了A了! 不过Po神的代码出锅了-solve中"d-temp"并没有什么用QwQQwQQwQ-应该把模数除以p^temp次方才行. 来自BZOJ讨论板的h ...

  6. BZOJ 2219: 数论之神

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2219 N次剩余+CRT... 就是各种奇怪的分类讨论.. #include<cstrin ...

  7. bzoj 1406 数论

    首先问题的意思就是在找出n以内的所有x^2%n=1的数,那么我们可以得到(x+1)(x-1)=y*n,那么我们知道n|(x+1)(x-1),我们设n=a*b,那么我们对于任意的a,我们满足n%a==0 ...

  8. bzoj 3453 数论

    首先我们知道对于f(x)来说,它是一个k次的多项式,那么f(x)的通项公式可以表示成一个k+1次的式子,且因为f(x)没有常数项,所以我们设这个式子为 f(x)=Σ(a[i]*x^i) (1<= ...

  9. BZOJ 4815 [Cqoi2017]小Q的表格 ——欧拉函数

    把式子化简一波. 发现一个比较厉害的性质:每个点只能影响到行列下标$gcd$与它相同的点. 然后就可以计算$\sum_{g<=k}f(g,g)*\sum_{i<=k}\sum_{j< ...

随机推荐

  1. 使用jemalloc优化nginx和mysql内存管理

    预先安装autoconf 和 make yum -y install autoconf make jemalloc的安装jiemalloc 开源项目网站 http://www.canonware.co ...

  2. git push ‘No refs in common and none specified’doing nothing问题解决

    git push ‘No refs in common and none specified’doing nothing问题解决 输入git push origin master即可解决问题

  3. [Vijos] 天才的记忆

    背景 神仙飞啊飞 描述 从前有个人名叫W and N and B,他有着天才般的记忆力,他珍藏了许多许多的宝藏.在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻松回答出这个问题,便可以 ...

  4. 【POJ2774&Ural1517】Long Long Message(后缀数组)

    题意:求两个字符串的最长公共子串 n<=1000 思路:这是一道论文题 ..]of longint; n,l1,l2,i,ans,m,l,r:longint; ch:ansistring; pr ...

  5. 【ZJOI2017 Round1练习&BZOJ4765】D1T3 普通计算姬(主席树,分块)

    题意: 思路:分块 使用树状数组维护sum[i]的前缀和 使用主席树维护root到u的路径上点的编号出现的个数 每次操作如果是修改就加入队列 如果是询问,考虑块内操作对询问的影响,每次在x点加上y会使 ...

  6. 创建SSH keys

    1.检查是否已经有SSH Key存在 windows: type "%userprofile%\.ssh\id_rsa.pub" Linux: cat ~/.ssh/id_rsa. ...

  7. (二)Commonjs规范与模块化

    在之前的学习中我们使用require()来引入我们需要的包,这其实就是模块化,各模块相互独立,可以通过某种方式引入别的模块.而这些引入方式都是遵循一定的规范的,这就是CommonJS规范. 一.Com ...

  8. Codeforces 653C Bear and Up-Down【暴力】

    题目链接: http://codeforces.com/problemset/problem/653/C 题意: 给定序列,偶数位的数字比两边都大,则成为nice,只可以交换两个数字,问有多少种交换方 ...

  9. 【Java源码】集合类-LinkedList

    一.类继承关系 LinkedList和ArrayList都实现了List接口.所以有List的特性,同时LinkedList也实现了Deque,所以它也具有双端队列和栈的特性. public clas ...

  10. redis 实际应用中的缓存作用(转)

    有人说互联网用户是用脚投票的,这句话其实也从侧面说明了,用户体验是多么的重要:这就要求在软件架构设计时,不但要注重可靠性.安全性.可扩展性以及可维护性等等的一些指标,更要注重用户的体验,用户体验分很多 ...