洛谷P3768 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)
不会……
两篇加在一起都看不懂……
https://www.cnblogs.com/cellular-automaton/p/8241128.html
https://www.luogu.org/blog/cjyyb/solution-p3768
//minamoto
#include<iostream>
#include<cstdio>
#include<map>
#define ll long long
using namespace std;
const int N=4e6+;
map<ll,ll> mp;
ll sum[N],phi[N],pri[N],cnt,vis[N],mod6,mod;
//mod是2的逆元,mod6是6的逆元
void init(ll p){
vis[]=sum[]=;
for(int i=;i<N;++i){
if(!vis[i]) pri[++cnt]=i,phi[i]=i-,sum[i]=1ll*i*i%p*phi[i]%p;
for(int j=;j<=cnt,i*pri[j]<N;++j){
vis[i*pri[j]]=;
int now=i*pri[j];
if(i%pri[j]==){
phi[now]=phi[i]*pri[j]%p;
sum[now]=phi[now]*now%p*now%p;
break;
}
phi[now]=phi[i]*(pri[j]-)%p;
sum[now]=phi[now]*now%p*now%p;
}
}
for(int i=;i<N;++i) (sum[i]+=sum[i-])%=p;
}
ll ksm(ll x,ll y,ll p){
ll res=;
while(y){
if(y&) (res*=x)%=p;
(x*=x)%=p,y>>=;
}
return res;
}
ll calc(ll n,ll p){
n%=p;
ll res=((+n)*n%p)*mod%p;
(res*=res)%=p;
return res;
}
ll calcs(ll n,ll p){
n%=p;
ll res=(n*(n+)%p)*(*n+)%p;
(res*=mod6)%=p;
return res;
}
ll calcsum(ll n,ll p){
if(n<N) return sum[n];
if(mp.count(n)) return mp[n];
ll x=,res=calc(n,p);
while(x<=n){
ll y=n/(n/x);
res=((res-(calcs(y,p)-calcs(x-,p)+p)%p*calcsum(n/x,p)%p)+p)%p;
x=y+;
}
return mp[n]=res;
}
int main(){
// freopen("testdata.in","r",stdin);
ll p,n;
scanf("%lld%lld",&p,&n);
mod=ksm(,p-,p),mod6=ksm(,p-,p);
init(p);
ll x=,ans=;
while(x<=n){
ll y=n/(n/x);
(ans+=((calcsum(y,p)-calcsum(x-,p)+p)%p*calc(n/x,p)%p))%=p;
x=y+;
}
printf("%lld\n",ans);
return ;
}
洛谷P3768 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)的更多相关文章
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 中国剩余定理 & 欧拉函数 & 莫比乌斯反演 & 狄利克雷卷积 & 杜教筛
ssplaysecond的博客(请使用VPN访问): 中国剩余定理: https://ssplaysecond.blogspot.jp/2017/04/blog-post_6.html 欧拉函数: h ...
- 【刷题】洛谷 P3768 简单的数学题
题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...
- 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...
- 洛谷 P3768 简单的数学题 解题报告
P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...
- 洛谷P3768 简单的数学题
解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...
- 洛谷 P3768 简单的数学题
https://www.luogu.org/problemnew/show/P3768 化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$ 其中$calc(d)=\ ...
- 洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】
题目描述 求 \[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} i*j*gcd(i,j) \pmod{p}\] \(n<=10^{10}\),\(p\) ...
- 洛谷 P3768 简单的数学题 (莫比乌斯反演)
题意:求$(\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j))mod p$(p为质数,n<=1e10) 很显然,推式子. $\sum_{i=1}^{n}\sum_{j ...
随机推荐
- UER#7 T2
题意:给定n个数,对于2到n,分别输出一个答案.答案定义为:对于当前的数k,在原数组中找一个长度为k的区间,使得区间最值之差最小,输出差值.注意,差值允许5%的误差. 很少看见近似算法的题啊..跪烂V ...
- Ubuntu 17.4下如何安装VMwareTools
解压vmware-tools-distrib 运行vmware-install.pl安装过程中间出现错误,要求选择"ifconfig"工具.由于ifconfig工具过时逐渐被各大厂 ...
- ios图片瀑布流代码
ios瀑布流,实现简单的瀑布流视图布局,可以显示网络图片,下拉刷新,上拉加载更多. 下载:http://www.huiyi8.com/sc/9087.html
- Android6.0 旋转屏幕(五)WMS启动应用流程(屏幕方向相关)
一.强制设置方向 1.Activity 如果要强制设置一个Activity的横竖屏可以通过Manifest去设置,跟Activity相关的信息都会保存在ActivityInfo当中. android: ...
- 51nod1671【货物运输】
开始天真的我以为这道题和运输计划是一样的套路.于是写了一发,debug后发现过了第一个点,十分开心的交了一发,结果只过了第一个点.后来发现这个并不是一样的,因为修建黑洞之后路径法变了,而运输计划没有( ...
- 剑指OFFER18 判断一个二叉树的子树
public class a18_IsSubTree { public static boolean hasSubTree(TreeNode treeRoot1, TreeNode treeRoot2 ...
- linux 进程学习笔记-信号semaphore
信号灯(信号量)不是进程通信手段,其是用于控制和协调在进程间通信过程中的共享资源访问,就如同互斥锁(两者的区别可以参考这里) 可以将简单地将信号灯想象成一个计数器,初始时计数器值为n(有n个资源可供使 ...
- windows 查看物理内存有几条以及查看电脑系统版本号的命令(dxdiag)
- 1034 Head of a Gang (30)(30 分)
One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ...
- Python中定时任务框架APScheduler的快速入门指南
前言 大家应该都知道在编程语言中,定时任务是常用的一种调度形式,在Python中也涌现了非常多的调度模块,本文将简要介绍APScheduler的基本使用方法. 一.APScheduler介绍 APSc ...