洛谷 P3768 简单的数学题 (莫比乌斯反演)
题意:求$(\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j))mod p$(p为质数,n<=1e10)
很显然,推式子。
$\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j)$
=$\sum_{d=1}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}ijd[gcd(i,j)==d]$
=$\sum_{d=1}^{n}d^3\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor \frac{n}{d}\rfloor}ij[gcd(i,j)==d]$
=$\sum_{d=1}^{n}d^3\sum_{i=1}^{\lfloor \frac{n}{d}\rfloor}\mu(i)i^2S({\lfloor \frac{n}{id}\rfloor})^2,S(n)=(n+1)*n/2$
=$\sum_{T=1}^{n}S({\lfloor \frac{n}{T}\rfloor})^2\sum_{d|T}d^3(\frac{T}{d})^2\mu(\frac{T}{d})$
=$\sum_{T=1}^{n}S({\lfloor \frac{n}{T}\rfloor})^2T^2\sum_{d|T}d\mu(\frac{T}{d})$
由$\mu*id=\varphi $可得$\sum_{T=1}^{n}S({\lfloor \frac{n}{T}\rfloor})^2T^2\varphi (T)$
前面整除分块,只需要预处理$T^2\varphi(T)$ 前缀和即可。
由于n有1e10那么大,就需要用到非线性的求前缀和的方法,这里用到杜教筛,见代码。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e6+;
int pri[N],tot,phi[N],sum[N];
bool p[N];
ll n,MD,ans,inv6;
unordered_map<ll,int> w;
void init() {
phi[]=;
for(int i=;i<N;i++) {
if(!p[i]) phi[i]=i-,pri[tot++]=i;
for(int j=;j<tot&&pri[j]*i<N;j++) {
p[i*pri[j]]=true;
if(i%pri[j]==) {
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*phi[pri[j]];
}
}
for(int i=;i<N;i++) sum[i]=(sum[i-]+1LL*i*i%MD*phi[i]%MD)%MD;
}
ll pre_3(ll x) {
x%=MD;
ll t=x*(x+)/%MD;
return t*t%MD;
}
ll pre_2(ll x) {
x%=MD;
return x*(x+)%MD*(*x+)%MD*inv6%MD;
}
int quick_pow(int x,int y) {
int ans=;
while(y) {
if(y&) ans=1LL*ans*x%MD;
y>>=;
x=1LL*x*x%MD;
}
return ans;
}
int cal(ll x) {
if(x<N) return sum[x];
if(w[x]) return w[x];
ll ans=pre_3(x);
for(ll l=,r;l<=x;l=r+) {
r=x/(x/l);
ans=(ans-(pre_2(r)-pre_2(l-)+MD)%MD*cal(x/l)%MD+MD)%MD;
}
return w[x]=ans;
}
int main() {
scanf("%lld%lld",&MD,&n);
inv6=quick_pow(,MD-),init();
for(ll l=,r;l<=n;l=r+) {
r=n/(n/l);
ans=(ans+pre_3(n/l)*(cal(r)-cal(l-)+MD)%MD)%MD;
}
printf("%lld\n",ans);
return ;
}
洛谷 P3768 简单的数学题 (莫比乌斯反演)的更多相关文章
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 洛谷 P3768 简单的数学题 解题报告
P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...
- 【刷题】洛谷 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 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)
传送门 不会…… 两篇加在一起都看不懂…… https://www.cnblogs.com/cellular-automaton/p/8241128.html https://www.luogu.or ...
- 洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】
题目描述 求 \[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} i*j*gcd(i,j) \pmod{p}\] \(n<=10^{10}\),\(p\) ...
- 洛谷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 简单的数学题解题报告
$$\begin{eqnarray}&\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\\&\sum_{d=1}^{n}\sum_{i=1}^{n}\su ...
随机推荐
- 木卯先生的笔记---Object类
1.简介 Object类是在 java.lang 包下的一个类,它是所有类的父类(也就是所有类都是Object类的子类,如果定义一个类的时候,没有指定继承的类,默认的就是继承Object类),所以Ob ...
- Ajax的简单基础
什么是 AJAX ? AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. 这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行 ...
- 免费提取百度文库 doc 文件
首先说明,今天要推荐的这款软件,不能不能不能免费提取百度文库里 PDF 格式的文件. 对于其他的格式,无论收费与否都能免费提取. 只是口头说说免不了耍流氓的嫌疑,举栗如下: 百度文库里<喜迎党的 ...
- Redis源码解析:15Resis主从复制之从节点流程
Redis的主从复制功能,可以实现Redis实例的高可用,避免单个Redis 服务器的单点故障,并且可以实现负载均衡. 一:主从复制过程 Redis的复制功能分为同步(sync)和命令传播(comma ...
- 实战经验 | Cassandra Java堆外内存排查经历全记录
背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测.压测时候比较容易触发OOM Killer,把cassandra进程干掉.问题是8G这个规格我配置的heap(Xmx ...
- 对比Model前后数据保存不同值
1.示例代码 public class SysLogBLL<T,W> : BLLBase where T : new() { #region 比较方法 /// <summary> ...
- ECMAScript 6 (浅显入门)
1.let:ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为unde ...
- vue前后端分离
axios前后端交互 安装 一定要安装到`项目目录下 cnpm install axios 配置 在main.js中配置 //配置axios import axios from 'axios' Vue ...
- SQLite in Python: 如何在Python中使用SQLite数据库
SQLite3 可使用 sqlite3 模块与 Python 进行集成.sqlite3 模块是由 Gerhard Haring 编写的.它提供了一个与 PEP 249 描述的 DB-API 2.0 规 ...
- linux基础指令参数
eth0,eth1,eth2--代表网卡一,网卡二,网卡三-- lo代表127.0.0.1,即localhost 参考: Linux命令:ifconfig 功能说明:显示或设置网络设备 语 法:ifc ...