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. 451. Swap Nodes in Pairs【LintCode java】

    Description Given a linked list, swap every two adjacent nodes and return its head. Example Given 1- ...

  2. 【坚持】Selenium+Python学习之从读懂代码开始 DAY1

    学习Selenium+Python已经好几个月了,但越学发现不懂的东西越多. 感觉最大的问题还是在于基础不扎实,决定从头开始,每天坚持读代码,写代码. 相信量变一定能到质变!!! 2018/05/09 ...

  3. docker应用容器化准则—12 factor

    在云的时代,越来越多的传统应用需要迁移到云环境下,新应用也要求能适应云的架构设计和开发模式.而12-factor提供了一套标准的云原生应用开发的最佳原则. 在容器云项目中应用容器化主要参考12-Fac ...

  4. kaldi DNN在线解码 aishell为例

    在kaldi 的工具集里有好几个程序可以用于在线识别.这些程序都位在src/onlinebin文件夹里,他们是由src/online文件夹里的文件编译而成(你现在可以用make ext 命令进行编译) ...

  5. IT视频课程集

    马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培 ...

  6. Python 函数内省

    函数内省(function introspection) 除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查看函数具有的属性: def factorial(n): r ...

  7. struts2--上传总结(限制大小和类型 非法上传的跳转)

    网上有很多版本,鉴于实践出真知的态度 我自己探索了一番 struts版本:2.3.16 限制大小: struts2默认是2M 所以如果要扩大大小限制,应该先配一个全局struts2最大上限 <c ...

  8. C#高级编程 (第六版) 学习 第一章:.Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  9. ngx_http_rewrite_module(重定向)

    1:指定rewrite规则 rewrite regex replacement [flag];   什么是rewrite规则:If the specified regular expression m ...

  10. jQuery之过滤元素

    还是那句话,这些知识一个小小的练习,更多的请看jQuery手册 在jQuery对象中的元素对象数组中过滤出一部分元素来1. first()2. last()3. eq(index|-index)4. ...