题目

我们要求的是

\[\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. sh_15_字符串统计操作

    sh_15_字符串统计操作 hello_str = "hello hello" # 1. 统计字符串长度 print(len(hello_str)) # 2. 统计某一个小(子)字 ...

  2. 妙味课堂——JavaScript基础课程笔记

    集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热 ...

  3. 深入理解 Java 线程池

    一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建 ...

  4. Linux之vnc启动及异常处理

    1)启动桌面1的服务 [root@testdb ~]# vncserver :1 New 'testdb:1 (root)' desktop is testdb:1 Starting applicat ...

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

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

  6. 2015ACM/ICPC亚洲区沈阳站 部分题解

    链接在这:http://bak.vjudge.net/contest/132442#overview. A题,给出a,b和n,初始的集合中有a和b,每次都可以从集合中选择不同的两个,相加或者相减,得到 ...

  7. [CSP-S模拟测试]:C(三分+贪心)

    题目传送门(内部题46) 输入格式 第一行$3$个整数$n,m,t$.第二行$n$个整数,表示$P_i$.接下来$m$行每行两个整数,表示$L_i,R_i$. 输出格式 一行一个整数表示答案. 样例 ...

  8. Okhttp源码分析--基本使用流程分析

    Okhttp源码分析--基本使用流程分析 一. 使用 同步请求 OkHttpClient okHttpClient=new OkHttpClient(); Request request=new Re ...

  9. Linux TCP自连接问题

    [参考文章]:net.ipv4.ip_local_port_range 的值究竟影响了啥 [参考文章]:Linux内核参数优化 最近卸载MySQL服务偶尔会遇到MySQL端口自连接问题.导致MySQL ...

  10. GitHub-Microsoft:DotNet

    ylbtech-GitHub-Microsoft:DotNet 1.返回顶部 · · wcf This repo contains the client-oriented WCF libraries ...