P2260 [清华集训2012]模积和
整除分块+逆元
详细题解移步P2260题解板块
式子可以拆开分别求解,具体见题解
这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元
整除分块:求Σ「n/i」(i=1~n),「」表示向下取整
由于「n/i」在某段区间内都有相同的值,所以可以分块算,复杂度O( sqrt(n) )
code:
ll res=;
for(ll l=,r;l<=n;l=r+){
r=n/(n/l);
res=res+(r-l+)*(n/l);
}
return res;
当mod是素数时,我们可以用费马小定理直接算,但是mod不为素数时,我们就可以用欧拉函数算(定义等右转Baidu)
当n,p互素时,n在 mod p 下的乘法逆元为 n^(phi(p)-1)
当n,p不互素时,并没有乘法逆元233333
特别地,当p为素数时,phi(p)=p-1,恰好是费马小定理
本人能力限制,不给出证明(逃
当所求逆元的数事先指定时,可以用暴力法(比如本题只需求2,6的逆元)
下面给出暴力法和欧拉函数的code:
#include<bits/stdc++.h>
using namespace std;
const int mod=;
template <typename T> int find_inv(T x){ //暴力预求
for(int i=;i<=;++i) //自行规定范围
if(1LL*x*i%mod==) //根据定义
return i;
}
template <typename T> int _phi(T x){ //欧拉函数计算
int k=sqrt(x),phi=x;
for(int i=;i<=k;++i)
if(x%i==){
phi=phi/i*(i-);
while(x%i==) x/=i;
}
if(x>) phi=phi/x*(x-);
return phi;
}
int ksm(int x,int y){
int res=;
for(;y;y>>=){
if(y&) res=1LL*res*x%mod;
x=1LL*x*x%mod;
}return res;
}
int main(){
cout<<find_inv()<<" "<<find_inv()<<endl;
int phi=_phi(mod);
cout<<ksm(,phi-)<<" "<<ksm(,phi-);
//2->9970209 6->3323403
return ;
}
接下来就是本题的code了
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
template <typename T> inline T min(T &a,T &b) {return a<b ?a:b;}
const int mod=;
ll n,m,ans;
inline ll sum1(ll l,ll r) {return (l+r)*(r-l+)%mod*%mod;} //求等差数列
inline ll sum2(ll x) {return x*(x+)%mod*(x*+)%mod*%mod;} //求1^2+2^2+3^2+...+x^2
inline ll calc(ll x){ //整除分块(根据题意稍作修改)
ll res=;
for(ll l=,r;l<=x;l=r+) r=x/(x/l),res=(res+(r-l+)*x-sum1(l,r)*(x/l)+mod)%mod;
return res;
}
int main(){
scanf("%lld%lld",&n,&m); if(n>m) swap(n,m);
ans=calc(n)*calc(m)%mod; ll s1,s2,s3;
for(ll l=,r;l<=n;l=r+){
r=min(n/(n/l),m/(m/l));
s1=n*m%mod*(r-l+)%mod;
s2=(n/l*m+m/l*n)%mod*sum1(l,r)%mod;
s3=(n/l)*(m/l)%mod*(sum2(r)-sum2(l-)+mod)%mod;
ans=(ans-(s1-s2+s3+mod)%mod+mod)%mod; //式子拆分后分别求解
}printf("%lld",ans);
return ;
}
P2260 [清华集训2012]模积和的更多相关文章
- P2260 [清华集训2012]模积和 【整除分块】
一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...
- 洛谷 P2260 [清华集训2012]模积和 || bzoj2956
https://www.lydsy.com/JudgeOnline/problem.php?id=2956 https://www.luogu.org/problemnew/show/P2260 暴力 ...
- 洛谷P2260 [清华集训2012]模积和(容斥+数论分块)
题意 https://www.luogu.com.cn/problem/P2260 思路 具体思路见下图: 注意这个模数不是质数,不能用快速幂来求逆元,要用扩展gcd. 代码 #include< ...
- luoguP2260 [清华集训2012]模积和
题意 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}n\%i*m\%j*[i!=j]\) \(\sum\limits_{i=1}^{n}\sum\limits ...
- BSOJ 4062 -- 【清华集训2012】串珠子
Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不 ...
- Luogu P4247 [清华集训2012]序列操作
题意 给定一个长度为 \(n\) 的序列 \(a\) 和 \(q\) 次操作,每次操作形如以下三种: I a b c,表示将 \([a,b]\) 内的元素加 \(c\). R a b,表示将 \([a ...
- UOJ 275. 【清华集训2016】组合数问题
UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
- Loj 2320.「清华集训 2017」生成树计数
Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...
随机推荐
- redis系列之数据库与缓存数据一致性解决方案
redis系列之数据库与缓存数据一致性解决方案 数据库与缓存读写模式策略 写完数据库后是否需要马上更新缓存还是直接删除缓存? (1).如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以 ...
- arcgis server multipoint 服务 applyedit功能
首先打开arcmap,在catalog中新建 File GDB 在File GDB 中新建 Feature Class 类型选择 Multipoint 选择坐标 此时图层列表中有了新建的要素,点击Ed ...
- IE8 select 动态下拉遇到的问题
发生背景:经QC测试程序一直没问题,到客户测试竟然出现了下拉窗口失效. 检查发现客户用的IE ,360 浏览器都出现一样的问题,据说360是引用IE的核心. 看下IE版本是 8的..... 开发和Q ...
- 洛谷P1083 借教室 NOIP2012D2T2 线段树
正解:线段树 解题报告: ...真的不难啊只是开了这个坑就填下? 就是先读入每天的教室数建个线段树然后每次读入就update一下,线段树存的就这一段的最小值啊,然后如果有次更新完之后tr[1]小于0了 ...
- 对Django框架架构和Request/Response处理流程的分析(转)
原文:http://blog.sina.com.cn/s/blog_8a18c33d010182ts.html 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组 ...
- __getattr__,settr
__getattr__ 如果属性查找在实例以及对应的类中(通过__dict__)失败, 那么会调用到类的__getattr__函数, 如果没有定义这个函数,那么抛出AttributeError异常. ...
- 【F12】Console命令,让js调试更简单
Console命令,让js调试更简单 一.显示信息的命令 console.log("normal"); // 用于输出普通信息 console.info("informa ...
- Jmeter之正则
正则转换网站:http://tool.oschina.net/regex/ 后置处理器,正则表达式提取器,写正则 待匹配文本框:放你的源文件或源代码,正则表达式:也就是你关联的那句匹配结果:根据匹配结 ...
- /etc/issue 查看系统版本号
查看系统版本号 [root@mysql bin]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m
- [py]编码-强力理解版
py编码骨灰级总结 思路: python执行py文件步骤--py2/3定义变量时unicode差异 1,py2 py3执行py文件的步骤 2,py2 定义变量x='mao' 1.x='mao', # ...