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))\). 莫比乌斯反演 这种题目,一看就是莫比乌斯反演啊!(连莫比乌斯函数都有) 关于莫比乌 ...
随机推荐
- NYOJ 一笔画问题 欧拉路
一笔画问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...
- CentOS 6.9使用sudo时出现:“...不在 sudoers 文件中,此事将被报告”的问题解决
在终端切换root账号登录 su 修改/etc/sudoers文件 visudo 找到:root ALL=(ALL) ALL,修改成自己的账号: 保存即可,按Exc,输入”:wq!“,回车.
- 驱动开发(8)处理设备I/O控制函数DeviceIoControl
本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan全部,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/d ...
- 《从零開始学Swift》学习笔记(Day48)——类型检查与转换
原创文章,欢迎转载.转载请注明:关东升的博客 继承会发生在子类和父类之间,是一系列类的继承关系. 比如:Person是类层次结构中的根类.Student是Person的直接子类.Worker是Pers ...
- 三星抛出万亿投资计划 布局四大科技创新领域(5G、人工智能、汽车半导体、生物技术四大新兴产业)
三星近日抛出震惊世人的投资计划,未来三年将在全球范围新增投资180万亿韩元(约1万亿元人民币).新增员工4万名.这是韩国单一企业集团大规模的投资计划. 笔者获悉,三星万亿投资计划主要分两大部分,一是在 ...
- 如何将dmp文件导入到自己的oracle数据库中
1.首先,我们可以先建立自己的一个用户表空间,创建表空间的格式如下: create tablespace test(表空间的名字) datafile 'D:\oracle\product\10.2.0 ...
- oc2---类
// main.m // 第一个OC类,OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体,创建一个对象就是创建一个结构体指针, #import <Foundation/ ...
- Xmind8破解激活
1.下载安装包: https://www.xmind.cn/download/ 进行安装 2.下载破解补丁: https://stormxing.oss-cn-beijing.aliyuncs.com ...
- android 更新ui
https://www.cnblogs.com/rayray/p/3437048.html https://www.cnblogs.com/zhaoyanjun/p/5546683.html
- bzoj4247: 挂饰(背包)
4247: 挂饰 题目:传送门 题解: 看完题目很明显的一道二维背包(一开始还推错了) 设f[i][j]表示前i个挂饰选完(可以有不选)之后还剩下j个挂钩的最大值(j最多贡献为n) 那么f[i][j] ...