洛谷P4902乘积
题面链接
题意简述
求\(\prod_{i=A}^B\prod_{j=1}^i \lgroup \frac{i}{j} \rgroup ^{\lfloor \frac{i}{j} \rfloor}\)
sol
我的做法是观察法,首先我们把\(i\)和\(j^{-1}\)分开做,可以看到
\(i\)的是这样的。表格内是每个\(i\)和\(j\)的对应\(i\)的贡献
| \(1^1\) | |||||
|---|---|---|---|---|---|
| \(2^2\) | \(2^1\) | ||||
| \(3^3\) | \(3^1\) | \(3^1\) | |||
| \(4^4\) | \(4^2\) | \(4^1\) | \(4^1\) | ||
| \(5^5\) | \(5^2\) | \(5^1\) | \(5^1\) | \(5^1\) | |
| \(6^6\) | \(6^3\) | \(6^2\) | \(6^1\) | \(6^1\) | \(6^1\) |
可以发现第\(i\)行我们只要快速求出指数就可以快速幂了。然后会发现一个神奇的性质,第\(i\)列每过\(i\)就会让指数加\(1\)。这样的话我们给\(i,2i,3i,4i,5i...\)加1,然后前缀和就行了。
要不还是再说清楚点吧。下面这个表是要加的指数。
| 1 | |||||||
|---|---|---|---|---|---|---|---|
| 1 | 1 | ||||||
| 1 | 0 | 1 | |||||
| 1 | 1 | 0 | 1 | ||||
| 1 | 0 | 0 | 0 | 1 | |||
| 1 | 1 | 1 | 0 | 0 | 1 | ||
| 1 | 0 | 0 | 0 | 0 | 0 | 1 | |
| 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
然后对每列做一遍前缀和。
| 1 | |||||||
|---|---|---|---|---|---|---|---|
| 2 | 1 | ||||||
| 3 | 1 | 1 | |||||
| 4 | 2 | 1 | 1 | ||||
| 5 | 2 | 1 | 1 | 1 | |||
| 6 | 3 | 2 | 1 | 1 | 1 | ||
| 7 | 3 | 2 | 1 | 1 | 1 | 1 | |
| 8 | 4 | 2 | 2 | 1 | 1 | 1 | 1 |
然后就变回去了,这也许是差分的思想???具体实现不需要对每列开数组,丢到一起就OK了。
下面的1,2,3,4,5,6均指 他们的逆元
| \(1^1\) | |||||
|---|---|---|---|---|---|
| \(1^2\) | \(2^1\) | ||||
| \(1^3\) | \(2^1\) | \(3^1\) | |||
| \(1^4\) | \(2^2\) | \(3^1\) | \(4^1\) | ||
| \(1^5\) | \(2^2\) | \(3^1\) | \(4^1\) | \(5^1\) | |
| \(1^6\) | \(2^3\) | \(3^2\) | \(4^1\) | \(5^1\) | \(6^1\) |
这是\(j^{-1}\)的贡献。
然后和上面一样搞,但我们直接把这个数乘上去而不是加指数。
相信泥萌都懂了。那么我就贴个代码。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define gt getchar()
#define ll long long
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
inline int in()
{
int k=0;char ch=gt;
while(ch<'-')ch=gt;
while(ch>'-')k=k*10+ch-'0',ch=gt;
return k;
}
const int YL=19260817,N=2e6+5,M=1e6;
inline int ksm(int a,int k){int r=1;while(k){if(k&1)r=1ll*r*a%YL;a=1ll*a*a%YL,k>>=1;}return r;}
inline int MO(const int &a){return a>=YL?a-YL:a;}
int sum[N],sum_i[N],inv[N];
int main()
{
sum_i[0]=1;
for(int i=1;i<=M;++i)inv[i]=ksm(i,YL-2);
for(int i=1;i<=M;++i)
for(int j=i;j<=M;j+=i)++sum[j];
for(int i=1;i<=M;++i)sum[i]=(sum[i]+sum[i-1])%(YL-1);
for(int i=1;i<=M;++i)sum_i[i]=1ll*ksm(i,sum[i])*sum_i[i-1]%YL;
for(int i=1;i<=M;++i)sum[i]=1;
for(int i=1;i<=M;++i)
for(int j=i;j<=M;j+=i)sum[j]=1ll*sum[j]*inv[i]%YL;
for(int i=2;i<=M;++i)sum[i]=1ll*sum[i]*sum[i-1]%YL;
for(int i=2;i<=M;++i)sum[i]=1ll*sum[i]*sum[i-1]%YL;
for(int i=1;i<=M;++i)sum[i]=1ll*sum[i]*sum_i[i]%YL;
sum[0]=1;
int t=in();
while(t--)
{
int a=in(),b=in();
printf("%lld\n",1ll*sum[b]*ksm(sum[a-1],YL-2)%YL);
}
return 0;
}
洛谷P4902乘积的更多相关文章
- 洛谷 P4902 乘积 (约数筛,前缀和(积))
洛谷P4902乘积 题意简述: 给 $ t $ 组 $ (a,b) $ 求: $ \prod_{i=A}^{B}\prod_{j=1}^{i}(\frac{i}{j})^{\lfloor \frac{ ...
- [洛谷P1887]乘积最大3
题目大意:请你找出$m$个和为$n$的正整数,他们的乘积要尽可能的大.输出字典序最小的方案 题解:对于一些数,若它们的和相同,那么越接近它们的乘积越大. 卡点:无 C++ Code: #include ...
- [NOIP2000] 提高组 洛谷P1018 乘积最大
题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...
- 洛谷 P1018 乘积最大
P1018 乘积最大 题目描述 今年是国际数学联盟确定的“ 20002000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 9090 周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学 ...
- 洛谷—— P1018 乘积最大
https://www.luogu.org/problem/show?pid=1018#sub 题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年 ...
- 洛谷 P1018乘积最大
题目描述 今年是国际数学联盟确定的“20002000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰9090周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友 ...
- java实现 洛谷 P1018 乘积最大
import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner ci ...
- 洛谷P1018乘积最大——区间DP
题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节. 代码如下: #include<iostream> # ...
- 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积
纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...
随机推荐
- MySQL基础架构之查询语句执行流程
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的. 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条 ...
- 随机图片api
什么是随机图片api 随机图片api是什么呢?通俗的讲就是当你访问一个api时,浏览器会随机返回给你一张图片. 其实原理很简单,把你要随机的图片放在一起,然后写一个php,当php被访问时,就随机指向 ...
- UGUI实现不规则区域点击响应
UGUI实现不规则区域点击响应 前言 大家吼啊!最近工作上事情特别多,没怎么打理博客.今天无意打开cnblog才想起该写点东西了.今天给大家讲一个Unity中不规则区域点击响应的实现方法,使用UGUI ...
- InnoDB表优化
InnoDB表存储优化 适时的使用 OPTIMIZE TABLE 语句来重组表,压缩浪费的表空间.这是在其它优化技术不可用的情况下最直接的方法. OPTIMIZE TABLE 语句通过拷贝表数据并重建 ...
- .Net 如何访问主流的各大数据库
做过开发的都知道,.NET基本可以理解是和MSSQL,windows服务器属于一个好的搭档,正如PHP和MYSQL,LIUNX等也可以理解是一个完美搭配:但是在实际的开发中并不完全是这样的,如果你是学 ...
- python之爬虫_并发(串行、多线程、多进程、异步IO)
并发 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢 import requests def fetch_async(url): res ...
- sprint2 (第八天)
今天课多,没做什么功能.这个sprint定的目标比较高,要实现的功能较多,可能完成不了目标值.因为GitHub下载和上传很慢,经常失败,所以这几天都没有更新GitHub,功能明天早点实现然后上传到Gi ...
- 王者荣耀交流协会PSP Daily项目Postmortem结果
王者荣耀交流协会PSP Daily项目Postmortem结果 整理:王超 设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? PSP D ...
- First Scrum Meeting (2015/10/18)
会议是在昨晚进行的,本来早就应该写博了,可惜今天校园网炸个不停= =.刚修好就赶紧来发博客. 会议基本要素 会议主题:爬虫项目的核心技术讨论以及项目初期的工作分配 会议时间:2015.10.18 19 ...
- 【Alpha发布】贡献分分配
最后贡献分分配: (1211)王嘉豪:32 (1186)黄雨萌:36 (1182)佘彦廷:40 (1208)何小松:50 (1200)鲁聃:62 (1174)邢浩:64 (1193)刘乾:66