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))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...
随机推荐
- Spring MVC-静态页面示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_static_pages.htm 说明:示例基于Spring MVC 4.1.6. ...
- 修改oracle客户端的字符集
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter, 表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表 方法有 : ...
- 逻辑斯蒂回归3 -- 最大熵模型之改进的迭代尺度法(IIS)
声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用.欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记.所以为 ...
- Shell脚本递归打印指定文件夹中全部文件夹文件
#!/bin/bash #递归打印当前文件夹下的全部文件夹文件. PRINTF() { ls $1 | while read line #一次读取每一行放到line变量中 do [ -d $1/$li ...
- hdoj--1864--最大保险额(背包)
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- Linux Shell Scripting Cookbook 读书笔记 6
wget,curl, tar, rsync wget ftp://example.com/somefile.img -t 5 -O download.img -o log -t表示重试的次数 -O指定 ...
- TopN问题(分别使用Hadoop和Spark实现)
简介 TopN算法是一个经典的算法,由于每个map都只是实现了本地的TopN算法,而假设map有M个,在归约的阶段只有M x N个,这个结果是可以接受的并不会造成性能瓶颈. 这个TopN算法在map阶 ...
- 组合模式(composite)C++实现
组合模式 意图: 将对象组合成树形结构以表示‘部分-整体’的层次结构,所以有时候又叫做部分-整体模式.组合模式使得用户对单个对象和组合对象的使用具有一致性.,它使我们树型结构的问题中,模糊了简单元素和 ...
- Java基础1一环境配置
1.下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.JDK安装:直接点击下一步,直到完成.注:默认 ...
- javascript中天气接口案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...