题目大意:略 洛谷传送门

杜教筛入门题?

以下都是常规套路的变形,不再过多解释

$\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 简单的数学题 (莫比乌斯反演+杜教筛)的更多相关文章

  1. 「洛谷P3768」简单的数学题 莫比乌斯反演+杜教筛

    题目链接 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出 \[\sum_{i=1}^n\sum_{j=1}^n (i\cdot j\cdot gcd(i,j))\ mod\ p\]  ...

  2. 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛

    题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...

  3. LOJ#6229. 这是一道简单的数学题(莫比乌斯反演+杜教筛)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^i\frac{lcm(i,j)}{gcd(i,j)}\] 答案对\(10^9+7\)取模. \(n< ...

  4. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  5. 【bzoj3930】[CQOI2015]选数 莫比乌斯反演+杜教筛

    题目描述 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公约数,以便进一 ...

  6. [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛)

    [BZOJ 3930] [CQOI 2015]选数(莫比乌斯反演+杜教筛) 题面 我们知道,从区间\([L,R]\)(L和R为整数)中选取N个整数,总共有\((R-L+1)^N\)种方案.求最大公约数 ...

  7. 洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】

    题目描述 求 \[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} i*j*gcd(i,j) \pmod{p}\] \(n<=10^{10}\),\(p\) ...

  8. 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( ...

  9. 【CCPC-Wannafly Winter Camp Day3 (Div1) F】小清新数论(莫比乌斯反演+杜教筛)

    点此看题面 大致题意: 让你求出\(\sum_{i=1}^n\sum_{j=1}^n\mu(gcd(i,j))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...

随机推荐

  1. POJ 3678

    这道题唯一一个注意的地方是,如出现X\/Y=0这种关系时,X=0,Y=0.已经是可以肯定的关系了,所以可以连边X->-X. 我也错了上面这地方.看来,还不够.以后要细心才好. #include ...

  2. STM32学习之路-LCD(4)&lt;显示字符&gt;

    昨晚疯狂的打了一夜的LOL,感觉L多了,今天一天精神萎靡.还是继续把显示字符给看了,可是在犹豫要不要写这篇文章 事实上写的东西也就是copy别人家的代码,不想写那么多,就记录下自己困惑的地方吧.也许改 ...

  3. 三期_day06_登录和找回password

    登录思路:   前台发送一个请求,然后通过spring的自己主动注參注入username和password,将password加密后与数据库中查找的做比較.返回是否通过. 这里还使用了EasyUI的校 ...

  4. Codeforces Beta Round #95 (Div. 2) D. Subway 边双联通+spfa

    D. Subway   A subway scheme, classic for all Berland cities is represented by a set of n stations co ...

  5. c19---指针和字符串

    // // main.c // 指针和字符串 // // Created by xiaomage on 15/6/14. // Copyright (c) 2015年 xiaomage. All ri ...

  6. Linux - shell壳脚本

    shell脚本. 壳,充当一个翻译,让计算机能够认识的二进制程序,并将结果翻译给我们. 加在内核上,可以跟内核打交道的壳. 可以通过/etc/shells 来查看. [root@local ~]# c ...

  7. 2017-3-9 leetcode 283 287 289

    今天操作系统课,没能安心睡懒觉23333,妹抖龙更新,可惜感觉水分不少....怀念追RE0的感觉 =================================================== ...

  8. B - Ultra-Fast Mathematician

    Problem description Shapur was an extremely gifted student. He was great at everything including Com ...

  9. DevExpress的GridControl拖拽DraopDown后计算HitInfo的RowHandle错误

    最近在使用GridControl的拖拽功能时候遇到了一个问题:当GridControl触发DropDrop事件时,计算对应的RowHandle错误.当把鼠标拖拽到GridView一个单元格的靠上面的部 ...

  10. 禁止button标签提交form表单,变成普通按钮

    button有个type属性,属性值可为button.submit.reset button=普通按钮,直接点击不会提交表单submit=提交按钮,点击后会提交表单reset=表单复位 当button ...