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\ ...
随机推荐
- FZU 2252 Yu-Gi-Oh!(枚举+贪心)
Problem 2252 Yu-Gi-Oh! Accept: 105 Submit: 628 Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- hdu3974 Assign the task【线段树】
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
- Mapreduce其他部分
1.hadoop的压缩codec Codec为压缩,解压缩的算法实现. 在Hadoop中,codec由CompressionCode的实现来表示.下面是一些实现: 可分割性:可分割与不可分割的区别:文 ...
- NLP-python 自然语言处理01
# -*- coding: utf-8 -*- """ Created on Wed Sep 6 22:21:09 2017 @author: Administrator ...
- MySQL在linux上的source code安装方法(configure)
1.建立操作系统用户和组 [root@faspdev ~]# groupadd mysql [root@faspdev ~]# useradd -g mysql mysql 2.解压安装文件,进入解压 ...
- element 表格元素 超链接
1.在循环体中的事件绑定 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- traceroute 排查 nginx 反向代理 配置
[root@b ~]# traceroute www.test.comtraceroute to www.test.com (134.175.58.66), 30 hops max, 60 byte ...
- 显示界面的流畅性FHHFPSIndicator
github地址https://github.com/jvjishou/FHHFPSIndicator 1.使用cocoapods pod 'FHHFPSIndicator' 使用方法: 然后在Ap ...
- 不需要更多JS框架了
现在,JavaScript框架已成为Web项目开发不可或缺的一部分.那是因为很长一段时间以来,各种浏览器之间有很大的差别,人们不得不编写框架对此进行屏蔽.问题在于,各种浏览器甚至在基本问题上都难以取得 ...
- PHP + Ajax处理大数据查询并导出Excel
思路:使用ajax多次请求服务器,分段生成多个Excel,然后打包压缩成zip,超链接指向下载的文件然后下载. [HTML部分] <input type="button" v ...