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. Maven学习(十三)-----Maven 构建生命周期

    Maven 构建生命周期 构建生命周期是什么? 构建生命周期阶段的目标是执行顺序是一个良好定义的序列. 这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段: 阶段 处理 描述 准 ...

  2. Vue 数组封装和组件data定义为函数一些猜测

     数组封装 var vm={ list:[0,1] } var push=vm.list.push;//把数组原来的方法存起来 vm.list.push=function(arg){//重新定义数组的 ...

  3. Java EE JSP内置对象及表达式语言

    一.JSP内置对象 JSP根据Servlet API规范提供了一些内置对象,开发者不用事先声明就可使用标准变量来访问这些对象. JSP提供了9种内置对象: (一).request 简述: JSP编程中 ...

  4. Winrar去广告图文教程

    一.前言 1.1 Winrar 解压缩工具 市场上有很多优秀的压缩工具,常用的有Winrar 和360 压缩工具.Winrar是免费压缩工具,特色是每次使用都会弹出广告.影响用户体验和工作效率,当然最 ...

  5. MAC清理DS_Store和._文件

    打开终端输入 find . -name .DS_Store -type f -delete ; find . -type d | xargs dot_clean

  6. Java接口获取系统配置信息

    Java获取当前运行系统的配置信息 接口:System.getProperty() 参数 描述 java.version Java运行时环境版本 java.vendor Java运行时环境供应商 ja ...

  7. 华为云分布式缓存服务DCS与开源服务差异对比

    华为云分布式缓存DCS提供单机.主备.集群等丰富的实例类型,满足用户高读写性能及快速数据访问的业务诉求.支持丰富的实例管理操作,帮助用户省去运维烦恼.用户可以聚焦于业务逻辑本身,而无需过多考虑部署.监 ...

  8. kettle_Spoon 修改共享DB连接带汉字引发的错误

    win10下: kettle_Spoon 修改共享DB连接带汉字引发的错误: Unexpected problem reading shared objects from XML file : nul ...

  9. 60行代码:Javascript 写的俄罗斯方块游戏

    哈哈这个实在是有点意思 备受打击当初用java各种类写的都要几百行啦 先看效果图: 游戏结束图: javascript实现源码: [javascript] view plaincopyprint? & ...

  10. SVN版本合并技巧

    公司使用了bug管理系统,项目添加新功能时,建一个主工单,再分成多个子工单,将子工单分给多个程序员来开发. 开发人员完成一部分就提交一部分,多个小功能模块就分多次提交到测试主干,然后用测试主干项目发布 ...