题目

我们要求的是

\[\prod\limits_{i=a}^b\prod\limits_{j=1}^i(\frac ij)^{\lfloor\frac ij\rfloor}
\]

先把它拆开

\[\prod\limits_{i=a}^b\prod\limits_{j=1}^ii^{\lfloor\frac ij\rfloor}(\frac1{\prod\limits_{i=a}^b\prod\limits_{j=1}^ij^{\lfloor\frac ij\rfloor}})
\]

对于右边,我们把\(j\in[1,i]\)换成\(j\in[1,b]\)是没有任何问题的。因为\(\forall j\in(i,b],\lfloor\frac ij\rfloor=0\),相当于多乘了几个\(1\)。

然后再交换右边的连乘符号

\[\prod\limits_{i=a}^b\prod\limits_{j=1}^ii^{\lfloor\frac ij\rfloor}(\frac1{\prod\limits_{j=1}^b\prod\limits_{i=a}^bj^{\lfloor\frac ij\rfloor}})
\]

我们把连乘换成指数的求和

\[\prod\limits_{i=a}^bi^{\sum\limits_{j=1}^i\lfloor\frac ij\rfloor}(\frac1{\prod\limits_{j=1}^bj^{\sum\limits_{i=a}^b\lfloor\frac ij\rfloor}})
\]

然后容斥一下

\[\prod\limits_{i=1}^bi^{\sum\limits_{j=1}^i\lfloor\frac ij\rfloor}\prod\limits_{j=1}^{a-1}j^{\sum\limits_{i=1}^{a-1}\lfloor\frac ij\rfloor}(\frac1{\prod\limits_{j=1}^bj^{\sum\limits_{i=1}^b\lfloor\frac ij\rfloor}\prod\limits_{i=1}^{a-1}i^{\sum\limits_{j=1}^i\lfloor\frac ij\rfloor}})
\]

\[let\ a=a-1,f(n)=\prod\limits_{i=1}^ni^{\sum\limits_{j=1}^i\lfloor\frac ij\rfloor},g(n)=\prod\limits_{j=1}^nj^{\sum\limits_{i=1}^n\lfloor\frac ij\rfloor}
\]

则要求的式子就变成了

\[f(b)g(a)(\frac1{f(a)g(b)})
\]

所以如果我们能够以\(O(nlog\ n)\)的复杂的筛出\(f,g\)的话就能解决问题。

首先计算\(f\)

\[let\ \sigma(n)=\sum\limits_{d|n}1,d(n)=\sum\limits_{i=1}^n\sigma(i)
\]

考虑到枚举约数和枚举倍数的等价性

\[d(n)=\sum\limits_{i=1}^n\lfloor\frac ni\rfloor
\]

\[f(n)=\prod\limits_{i=1}^ni^{d(i)}
\]

显然其递推式为

\[f(n)=f(n-1)n^{d(n)}
\]

所以我们可以\(O(nlog\ n)\)筛出\(\sigma\)即除数函数,然后前缀和求出,\(d\),再按递推式求出\(f\)。

注意\(d\)是作为指数存在,所以取模时需要对\(P-1\)取模。

再计算\(g\)

\[let\ t(n)=\frac{g(n)}{g(n-1)}=\prod\limits_{i=1}^ni^{\lfloor\frac ni\rfloor},h(n)=\frac{t(n)}{t(n-1)}=\prod\limits_{d|n}d
\]

显然我们可以\(O(nlog\ n)\)筛出\(h\)即约数积函数,然后做两遍前缀积就可以得到\(g\)。

#include<bits/stdc++.h>
using namespace std;
namespace IO
{
char ibuf[(1<<21)+1],obuf[(1<<21)+1],st[15],*iS,*iT,*oS=obuf,*oT=obuf+(1<<21);
char Get(){return (iS==iT? (iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT? EOF:*iS++)):*iS++);}
void Flush(){fwrite(obuf,1,oS-obuf,stdout),oS=obuf;}
void Put(char x){*oS++=x;if(oS==oT)Flush();}
int read(){int x=0;char ch=Get();while(ch>57||ch<48)ch=Get();while(ch>=48&&ch<=57)x=x*10+(ch^48),ch=Get();return x;}
void write(int x){int top=0;if(!x)Put('0');while(x)st[++top]=(x%10)+48,x/=10;while(top)Put(st[top--]);Put('\n');}
}
using namespace IO;
const int N=1000007,A=1000000,P=993244853;
int inc(int a,int b,int p=P){a+=b;return a>=p? a-p:a;}
int mul(int a,int b){return 1ll*a*b%P;}
int power(int a,int k){int r=1;for(;k;k>>=1,a=mul(a,a))if(k&1)r=mul(a,r);return r;}
int d[N],s[N],f[N];
int main()
{
int i,j,n,a,b;
s[0]=f[0]=1;
for(i=1;i<=A;++i) s[i]=1;
for(i=1;i<=A;++i) for(j=i;j<=A;j+=i) ++d[j],s[j]=mul(s[j],i);
for(i=1;i<=A;++i) d[i]=inc(d[i],d[i-1],P-1),f[i]=mul(f[i-1],power(i,d[i])),s[i]=mul(s[i],s[i-1]);
for(i=1;i<=A;++i) s[i]=mul(s[i],s[i-1]);
for(n=read();n;--n) a=read()-1,b=read(),write(mul(mul(mul(power(f[a],P-2),f[b]),power(s[b],P-2)),s[a]));
return Flush(),0;
}

Luogu P4902 乘积的更多相关文章

  1. 洛谷 P4902 乘积 (约数筛,前缀和(积))

    洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...

  2. Luogu - P1018 乘积最大 - 题解

    原文:https://www.luogu.org/problemnew/solution/P1018?page=7 题目:P1018[乘积最大] 前言: 这题的正解理论上说是DP,可是由于民间数据太水 ...

  3. luogu P1018 乘积最大

    题目描述 今年是国际数学联盟确定的"2000――世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  4. 洛谷P4902乘积

    题面链接 洛谷 题意简述 求\(\prod_{i=A}^B\prod_{j=1}^i \lgroup \frac{i}{j} \rgroup ^{\lfloor \frac{i}{j} \rfloor ...

  5. 与高精死杠的几天——记两道简单的高精dp

    (同样也是noip往年的题 1​.矩阵取数游戏 题目链接[Luogu P1005 矩阵取数游戏] \(\mathcal{SOLUTION}:\) 通过对题目条件的分析,我们可以发现,每一行取数对答案的 ...

  6. Luogu 1060 开心的金明 / NOIP 2006 (动态规划)

    Luogu 1060 开心的金明 / NOIP 2006 (动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨 ...

  7. Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)

    Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 ...

  8. Luogu P4643 【模板】动态dp

    题目链接 Luogu P4643 题解 猫锟在WC2018讲的黑科技--动态DP,就是一个画风正常的DP问题再加上一个动态修改操作,就像这道题一样.(这道题也是PPT中的例题) 动态DP的一个套路是把 ...

  9. luogu P5291 [十二省联考2019]希望

    luogu loj 无论最终结果将人类历史导向何处 \(\quad\)我们选择 \(\quad\quad\)\(\large{希望}\) 诶我跟你讲,这题超修咸的 下面称离连通块内每个点距离不超过\( ...

随机推荐

  1. 用bootstrap写一个登陆页

    <div class="container"> <p class="text-center marginTop35">后台管理系统< ...

  2. Dell PowerEdge服务器RAID卡驱动下载

    Dell PowerEdge服务器RAID卡驱动下载 DELL新阵列卡驱动下载 型号 支持系统驱动 H310/710 /710P/810 Win2008 x32 Windows 2008 x64 Wi ...

  3. JavaWeb-SpringBoot(抖音)_一、抖音项目制作

    JavaWeb-SpringBoot(抖音)_一.抖音项目制作 传送门 JavaWeb-SpringBoot(抖音)_二.服务器间通讯 传送门 JavaWeb-SpringBoot(抖音)_三.抖音项 ...

  4. Java EE 之 Hibernate异常解决:org.hibernate.exception.SQLGrammarException: could not execute statement

    本质原因:配置的Java Bean,由Hibernate自动产生的SQL语句中有语法错误 原因如下: 情况1.存在字段名/表名与数据库关键字冲突 情况2.MySQL5.0以后与MySQL5.0以前事务 ...

  5. js 原型链、构造函数、原型与实例之间的关系

    面向对象编程都会涉及到继承这个概念,JS中实现继承的方式主要是通过原型链的方法. 一.构造函数.原型与实例之间的关系 每创建一个函数,该函数就会自动带有一个 prototype 属性.该属性是个指针, ...

  6. rtmp 协议详解

    1. handshake 1.1 概述 rtmp 连接从握手开始.它包含三个固定大小的块.客户端发送的三个块命名为 C0,C1,C2:服务端发送的三个块命名为 S0,S1,S2. 握手序列: 客户端通 ...

  7. Laravel find in set排序

    做项目遇到个需求,需要对结果集中的数据进行指定规则的顺序排列.例如,用户状态有四种: 0=>未激活:1=>正常:2=>禁用:3=>软删除 现在的需求是,我要按照:正常-> ...

  8. Docker部署测试

    安装虚拟机 准备一台Centos7的VM,名为Centos7-1 具体过程可以参考: KVM安装 KVM——以桥接的方式搭建虚拟机网络配置 安装Docker 下载rpm包:https://downlo ...

  9. HashMap三两事

    前言 JDK8中对HashMap做了优化,依然是用数组存储数据,但是扩容时采用双链表的方式避免了高并发情况下导致出现循环链表的问题,另外也引入了红黑树,提高碰撞元素的搜索速度. 一段代码 下面这段代码 ...

  10. java使用解压zip文件,文件名乱码解决方案

    File outFileDir = new File(outDir);if (!outFileDir.exists()) { boolean isMakDir = outFileDir.mkdirs( ...