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\ ...
随机推荐
- 线性DP总结(LIS,LCS,LCIS,最长子段和)
做了一段时间的线性dp的题目是时候做一个总结 线性动态规划无非就是在一个数组上搞嘛, 首先看一个最简单的问题: 一,最长字段和 下面为状态转移方程 for(int i=2;i<=n;i++) { ...
- 通过qemu复现路由器漏洞
目录 简介 环境搭建 固件解包 复现漏洞,IDA调试 参考资料 简介 qemu和vmware一样,一种虚拟机软件,只不过qemu能够虚拟的平台更加丰富一些.能够虚拟很多嵌入式平台的设备. 工作上需要向 ...
- JS模块化编程(三)
AMD&CMD 对象字面量 对象字面量表示,其实就是用一对大括号括起来的键值对,也就是JavaScript 声明对象的方式 var myObject = {variableKey : vari ...
- 查询删除安装rpm -qa | grep -i wrapname
查询:rpm -qa | grep -i wrapname 删除:sudo rpm -ev wrapname 删除依赖:sudo rpm -ev --nodeps mysql-libs-5.6.60- ...
- 迁移到 Linux :入门介绍 | Linux 中国
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79001952 这个新文章系列将帮你从其 ...
- java-mybaits-011-mybatis-拦截器计算耗时
实现Mybatis官方提供的拦截器,用于记录SQL语句的执行时间 package com.github.bjlhx15.mybatis; /** * @author lihongxu * @since ...
- centos 基础修改文件权限
在centos 下 nginx 默认用户是user = apachegroup = apache 所以需要更改文件和文件夹权限时候需要满足apache用户才能进行 常用方式: $ chmod Runt ...
- 如何实现在H5里调起高德地图APP?
http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...
- Py中pyplot之subplot例子【转载】
转自:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot.html 1.有NaN的余弦图subplot import numpy ...
- IE加载项
加载项 加载项也称为ActiveX控件.浏览器扩展.浏览器帮助应用程序对象或工具栏,可以通过提供多媒体或交互式内容(如动画)来增强对网站的体验. 但是,某些加载项可导致计算机停止响应或显示不需要的 ...