P3768 简单的数学题

题目描述

由于出题人懒得写背景了,题目还是简单一点好。

输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j)) \bmod p\),其中\(gcd(a,b)\)表示\(a\)与\(b\)的最大公约数。

刚才题面打错了,已修改

输入输出格式

输入格式:

一行两个整数\(p\)、\(n\)。

输出格式:

一行一个整数\((\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))\bmod p\)。

说明

对于\(20\%\)的数据,\(n \leq 1000\)。

对于\(30\%\)的数据,\(n \leq 5000\)。

对于\(60\%\)的数据,\(n \leq 10^6\),时限\(1s\)。

对于另外\(20\%\)的数据,\(n \leq 10^9\),时限\(3s\)。

对于最后\(20\%\)的数据,\(n \leq 10^{10}\),时限\(6s\)。

对于\(100\%\)的数据,\(5 \times 10^8 \leq p \leq 1.1 \times 10^9\)且\(p\)为质数。


从各种方向推推式子,你会差不多发现有

\[\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j)
\]

\[=\sum_{T=1}^nF(\lfloor\frac{n}{T}\rfloor)^2T^2\varphi(T)
\]

其中\(F(n)=\sum\limits_{i=1}^ni\)

然后上杜教筛设\(\mathbf f(n)=n^2\varphi(n)\),则有

\[\mathbf {Id}^3=\mathbf f *\mathbf {Id}^2
\]

带进去杜教筛得到

\[\mathbf s(n)=\sum_{i=1}^n i^3-\sum_{i=2}^n i^2 \mathbf s(\lfloor\frac{n}{i}\rfloor)
\]

然后小学奥数一波算前缀和就行了

小心爆\(long \ long\)


Code:

#include <cstdio>
#include <unordered_map>
#define ll long long
const int N=5e6;
ll n,mod,phi[N+10],inv2,inv6;
int pri[N+10],ispri[N+10],cnt;
ll qp(ll d,ll k){ll re=1;while(k){if(k&1)re=re*d%mod;d=d*d%mod,k>>=1;}return re;}
ll f(ll x){x%=mod;return x*(x+1)%mod*inv2%mod;}
ll g(ll x){x%=mod;return x*(x+1)%mod*(2*x%mod+1)%mod*inv6%mod;}
void init()
{
phi[1]=1;
for(int i=2;i<=N;i++)
{
if(!ispri[i])
{
phi[i]=i-1;
pri[++cnt]=i;
}
for(int j=1;j<=cnt&&i*pri[j]<=N;j++)
{
ispri[i*pri[j]]=1;
if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j]%mod;break;}
else phi[i*pri[j]]=phi[i]*(pri[j]-1)%mod;
}
}
for(int i=1;i<=N;i++)
phi[i]=(phi[i]*i%mod*i%mod+phi[i-1])%mod;
}
std::unordered_map <ll,ll> Phi;
ll calphi(ll n)
{
if(n<=N) return phi[n];
if(Phi.find(n)!=Phi.end()) return Phi[n];
ll ret=f(n)*f(n)%mod;
for(ll l=2,r;l<=n;l=r+1)
{
r=n/(n/l);
(ret-=(calphi(n/l)*(g(r)-g(l-1))%mod))%=mod;
}
ret=(ret%mod+mod)%mod;
return Phi[n]=ret;
}
int main()
{
scanf("%lld%lld",&mod,&n);
init();
ll ans=0;inv6=qp(6,mod-2);inv2=qp(2,mod-2);
for(ll l=1,r;l<=n;l=r+1)
{
r=n/(n/l);
(ans+=f(n/l)*f(n/l)%mod*(calphi(r)-calphi(l-1))%mod)%=mod;
}
ans=(ans%mod+mod)%mod;
printf("%lld\n",ans);
return 0;
}

2018.11.26

洛谷 P3768 简单的数学题 解题报告的更多相关文章

  1. 洛谷P3768 简单的数学题解题报告

    $$\begin{eqnarray}&\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\\&\sum_{d=1}^{n}\sum_{i=1}^{n}\su ...

  2. 【刷题】洛谷 P3768 简单的数学题

    题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...

  3. 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...

  4. 洛谷 P3768 简单的数学题

    https://www.luogu.org/problemnew/show/P3768 化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$ 其中$calc(d)=\ ...

  5. 洛谷P3768 简单的数学题

    解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...

  6. 洛谷P3768 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)

    传送门 不会…… 两篇加在一起都看不懂…… https://www.cnblogs.com/cellular-automaton/p/8241128.html https://www.luogu.or ...

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

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

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

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

  9. 洛谷 P3768 简单的数学题 (莫比乌斯反演)

    题意:求$(\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j))mod p$(p为质数,n<=1e10) 很显然,推式子. $\sum_{i=1}^{n}\sum_{j ...

随机推荐

  1. nuget必备插件(待续)

    DevLib.ExtensionMethods Extend Z.ExtensionMethods

  2. google::protobuf 编译方法

    这两天用了一下Protobuf 感觉很方便, 记录一下编译过程, 以做务忘(需要安装cmake): 1: 下载地址: https://developers.google.com/protocol-bu ...

  3. 英特尔® 实感™ 深度摄像头代码示例 – R200 摄像头数据流

    英特尔开发人员专区原文地址 简介 该可下载代码示例展示了如何使用面向 Windows 的英特尔® 实感™ SDK* 捕捉和查看用 C#/XAML 编写的原始 R200 摄像头数据流. Visual S ...

  4. Fulfilling Work: The Shippers More entrepreneurs hire 'fulfillment' outfits to store and ship their products

    By Stu Woo June 23, 2011 Brett Teper faced a logistical problem when he and a partner founded ModPro ...

  5. Scrum立会报告+燃尽图(十月十三日总第四次):前期宣传相关工作

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2194 Scrum立会master:刘欣 一.小组介绍 组长:付佳 组员: ...

  6. 王者荣耀交流协会final发布WBS+PSP

    WBS: PSP: 时间为估计,大致精确. 类型 personal software process stages 预估时间 实际花费时间 planning 计划 4h 4h estimate 4h ...

  7. Kotlin 学习笔记(一)

    (Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...

  8. 《C》指针

    储存单元: 不同类型的数据所占用的字节不同,上面一个长方形格子表示4个字节 变量: 变量的值,就是存储的内容.变量的名就相当于地址的名.根据变量类型分配空间:通过变量名引用变量的值,程序经过编译将变量 ...

  9. python 中如何计算时间差...

    Q:如何方便的计算两个时间的差,如两个时间相差几天,几小时等 A:使用datetime模块可以很方便的解决这个问题,举例如下: >>> import datetime>> ...

  10. Opendarlight Carbon 安装

    写在前面 目前最轻松的一次安装过程,感谢大翔哥的帮助. 安装过程 1.Zip包下载 找到Opendaylight官网,进入下载界面找到Carbon版本并下载. 2.Zip包解压 把这个zip压缩包解压 ...