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]模积和的更多相关文章

  1. P2260 [清华集训2012]模积和 【整除分块】

    一.题目 P2260 [清华集训2012]模积和 二.分析 参考文章:click here 具体的公式推导可以看参考文章.博主的证明很详细. 自己在写的时候问题不在公式推导,公式还是能够比较顺利的推导 ...

  2. 洛谷 P2260 [清华集训2012]模积和 || bzoj2956

    https://www.lydsy.com/JudgeOnline/problem.php?id=2956 https://www.luogu.org/problemnew/show/P2260 暴力 ...

  3. 洛谷P2260 [清华集训2012]模积和(容斥+数论分块)

    题意 https://www.luogu.com.cn/problem/P2260 思路 具体思路见下图: 注意这个模数不是质数,不能用快速幂来求逆元,要用扩展gcd. 代码 #include< ...

  4. 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 ...

  5. BSOJ 4062 -- 【清华集训2012】串珠子

    Description 铭铭有n个十分漂亮的珠子和若干根颜色不同的绳子.现在铭铭想用绳子把所有的珠子连接成一个整体. 现在已知所有珠子互不相同,用整数1到n编号.对于第i个珠子和第j个珠子,可以选择不 ...

  6. Luogu P4247 [清华集训2012]序列操作

    题意 给定一个长度为 \(n\) 的序列 \(a\) 和 \(q\) 次操作,每次操作形如以下三种: I a b c,表示将 \([a,b]\) 内的元素加 \(c\). R a b,表示将 \([a ...

  7. UOJ 275. 【清华集训2016】组合数问题

    UOJ 275. [清华集训2016]组合数问题 组合数 $C_n^m $表示的是从 \(n\) 个物品中选出 \(m\) 个物品的方案数.举个例子,从$ (1,2,3)(1,2,3)$ 三个物品中选 ...

  8. Loj #2331. 「清华集训 2017」某位歌姬的故事

    Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...

  9. Loj 2320.「清华集训 2017」生成树计数

    Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...

随机推荐

  1. myeclipse乱码/GBK只支持中文

    Windows>>Pereferences>>General>Editors>>Spelling>>Encoding选项下选择other,然后输入 ...

  2. poj3168 Barn Expansion【计算几何 平面扫描】

    Farmer John has N (1 <= N <= 25,000) rectangular barns on his farm, all with sides parallel to ...

  3. ubuntu16.04下安装artoolkit5

    目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic).CV的方法很多,简单些比如FREAK+ICP(ARToolKit中的NFT),复杂些就是S ...

  4. The "get" method should be used when the form is idempotent---正交的两个概念 get 幂等

    https://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.1 17.13.1 Form submission method The me ...

  5. sql中select into和insert into的区别

    select into主要是作用于没有新建表,在复制数据的时候新建 insert into主要作用于已经新建了一个表,直接把要复制的数据复制到新建好的表中

  6. JDK 伪共享解决方案

    关于AtomicReference AtomicReference是由JAVA5引入的,用于对一个对象引用进行原子操作,我们可以看到AtomicReference的实现是用CAS技术对引用进行指令级别 ...

  7. 【Python-虫师】自动化测试模型--参数化

    一.自动化测试代码最开始是线性的,后续发展为模块化代码,所以涉及到了函数和方法的引用. 1. 函数和方法的最主要区别: Python的方法中定义函数的时候,函数中必须写self.而单独定义函数的时候则 ...

  8. 前端 html input标签 placeholder属性 标签上显示内容

    前端 html  input标签 的placeholder属性  标签上显示内容 <!DOCTYPE html> <html lang="en"> < ...

  9. XPath轴

    XPath 轴翻译:Linyupark / 2006-03-24 The XML Example DocumentXML举例文档 We will use the following XML docum ...

  10. SSM请求的响应

    1.请求响应文本到页面直接用pw.println("文本信息");打印到页面: 2.如果请求方法前不加@ResponseBody,返回字符串直接转发到对应的页面: 3.如果请求方法 ...