luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)
题目大意:略 洛谷传送门
杜教筛入门题?
以下都是常规套路的变形,不再过多解释
$\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ijgcd(i,j)$
$\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ij\sum\limits_{d|gcd(i,j)}\varphi(d)$
$\sum\limits_{d=1}^{N} \varphi(d) \sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}ij$
$\sum\limits_{d=1}^{N} \varphi(d) d^{2} \sum\limits_{i=1}^{\left \lfloor \frac{N}{d} \right \rfloor}\sum\limits_{j=1}^{\left \lfloor \frac{N}{d} \right \rfloor}ij$
令$f(d)=\varphi(d) d^{2}$,由于$\varphi(d)$和$1(d)$都是积性函数,所以$f(d)$是积性函数
数据范围好像有点大?$n \leq 10^{10}$?杜教筛!
考虑设计一个和$f$搭配且同为积性函数$g$,且$(f*g)$能很快计算出来,令$f(n)$前缀和是$S(n)$
给出杜教筛的推导式
$S(n)=\sum\limits_{i=1}^{N}(f*g)(i)-\sum\limits_{i=2}^{N}g(i)S(\left \lfloor \frac{N}{i} \right \rfloor)$
根据常见狄利克雷卷积形式$id=1*\varphi$,容易推出比较优秀的$g(d)=d^{2}$,那么$(f*g)(n)=\sum\limits_{d|n}f(d)*g(\frac{n}{d})=\varphi(d) d^{2}(\frac{n}{d})^{2}=n^{3}$
$g$的前缀和就是平方和,$(f*g)$的前缀和就是立方和,可以$O(1)$求出来
一定要多取模,不然有些地方可能会爆$longlong$
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 5000010
#define M1 3000010
#define ll long long
#define dd double
#define cll const long long
using namespace std; const int maxn=; void exgcd(ll a,ll b,ll &x,ll &y)
{
if(!b){ x=; y=; return; }
exgcd(b,a%b,x,y); ll t=x; x=y; y=t-a/b*y;
}
struct Hsh{
#define M 3000000
int head[M1],nxt[M1],val[M1],cte;ll to[M1];
void ins(ll x,int w)
{
int j,y=x%M;ll v;
for(j=head[y];j;j=nxt[j]){ v=to[j]; if(v==x) return; }
cte++; to[cte]=x; val[cte]=w; nxt[cte]=head[y]; head[y]=cte;
}
int query(ll x)
{
int j,y=x%M;ll v;
for(j=head[y];j;j=nxt[j]){ v=to[j]; if(v==x) return val[j]; }
return -;
}
#undef M
}h; ll n,m,inv2,inv6;
int use[N1],pr[N1],cnt,phi[N1];
ll f[N1],sf[N1];
void get_mu(cll &jr)
{
int i,j; phi[]=f[]=sf[]=use[]=;
for(i=;i<=maxn;i++)
{
if(!use[i]){ pr[++cnt]=i; phi[i]=i-; }
for(j=;j<=cnt&&i*pr[j]<=maxn;j++)
{
use[i*pr[j]]=;
if(i%pr[j]){ phi[i*pr[j]]=phi[i]*(pr[j]-)%jr; }
else{ phi[i*pr[j]]=phi[i]*pr[j]%jr; break; }
}
f[i]=1ll*i*i%jr*phi[i]%jr;
sf[i]=(sf[i-]+f[i])%jr;
}
}
int F(ll x,cll &jr)
{
if(x<=maxn) return sf[x];
ll ans=h.query(x); if(ans!=-) return ans;
ll i,la,pi,pla; ans=x%jr*(x+)%jr*inv2%jr; ans=ans*ans%jr;
for(i=;i<=x;i=la+){
la=x/(x/i); pi=i%jr; pla=la%jr;
ans-=(1ll*pla%jr*(pla+)%jr*(*pla+)%jr-1ll*(pi-)%jr*(pi)%jr*(*pi-)%jr)*inv6%jr*F(x/i,jr)%jr;
}
ans=(ans%jr+jr)%jr;
h.ins(x,ans);
return ans;
} int main()
{
scanf("%lld%lld",&m,&n);
cll jr=m; get_mu(jr); ll i,la,x,y,ans=;
exgcd(,jr,inv6,y); exgcd(,jr,inv2,y); inv6=(inv6%jr+jr)%jr; inv2=(inv2%jr+jr)%jr;
for(i=;i<=n;i=la+)
{
la=n/(n/i);
if((n/i)&) x=(n/i+)/%jr*((n/i)%jr)%jr;
else x=(n/i)/%jr*((n/i+)%jr)%jr;
ans=(x*x%jr*(F(la,jr)-F(i-,jr)+jr)+ans)%jr;
}
printf("%lld\n",ans);
return ;
}
luogu 3768 简单的数学题 (莫比乌斯反演+杜教筛)的更多相关文章
- 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛
题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\] ...
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)
题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛
题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...
- [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)
[BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...
- 洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】
题目描述 求 \[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} i*j*gcd(i,j) \pmod{p}\] \(n<=10^{10}\),\(p\) ...
- EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)
传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...
- 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)
点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...
随机推荐
- javascript--闭包与this
理解javascript中的闭包与this http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html http: ...
- POJ 1696
这题是明显的TU包变形. 使用卷包裹法可解,而且是必定可以经过所有点的.直观可知,当经过某点后,相当于把之前的点抹去,求剩下点的TU包,递归下去,也就能把点全部经过了. 于是,只需把经过的点标记一下就 ...
- POJ 2831
次小生成树.求出两点间最短路径的最大权值,再把要加入的边与之比较即可. #include <iostream> #include <cstdio> #include <c ...
- hdoj1051Wooden Sticks
/*这道题目是先要排序的,依照长度或者重量排都能够. 当长度(重量)同样时就依照重量(长度)排, 从大到小或从小到大都能够! 这里我懂的.没有问题! 排序之后,问题就能够简化,(如果依照长度不等 ...
- Codeforces Round #313 (Div. 2)(A,B,C,D)
A题: 题目地址:Currency System in Geraldion 题意:给出n中货币的面值(每种货币有无数张),要求不能表示出的货币的最小值.若全部面值的都能表示,输出-1. 思路:水题,就 ...
- use 在php 用法中的总结
1.命名空间 2.匿名函数 3.多继承 4.暂时想到这三个,如果有请补充在评论区
- bzoj2958: 序列染色&&3269: 序列染色
DP这种东西,考场上就只能看命了.. #include<cstdio> #include<iostream> #include<cstring> #include& ...
- Swift3.0中关于日期类的使用指引
日期的处理在大大小小的iOS项目中都十分常见,随着Swift3.0正式版的即将推出,语法的改变让NSDate以及相关类的使用都与之前略有不同,这里将会对基于Swift3.0版本的NSDate及相关类的 ...
- P1127 词链
P1127 词链 题目描述 如果单词X的末字母与单词Y的首字母相同,则X与Y可以相连成X.Y.(注意:X.Y之间是英文的句号“.”).例如,单词dog与单词gopher,则dog与gopher可以相连 ...
- Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
安卓出现如下错误,需要增加FLAG_ACTIVITY_NEW_TASK标志 Intent intent1 = new Intent(getApplicationContext(), CameraAct ...