题面链接

洛谷

题意简述

求\(\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}\)的贡献。

然后和上面一样搞,但我们直接把这个数乘上去而不是加指数。

相信泥萌都懂了。那么我就贴个代码。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define gt getchar()
  5. #define ll long long
  6. #define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
  7. inline int in()
  8. {
  9. int k=0;char ch=gt;
  10. while(ch<'-')ch=gt;
  11. while(ch>'-')k=k*10+ch-'0',ch=gt;
  12. return k;
  13. }
  14. const int YL=19260817,N=2e6+5,M=1e6;
  15. 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;}
  16. inline int MO(const int &a){return a>=YL?a-YL:a;}
  17. int sum[N],sum_i[N],inv[N];
  18. int main()
  19. {
  20. sum_i[0]=1;
  21. for(int i=1;i<=M;++i)inv[i]=ksm(i,YL-2);
  22. for(int i=1;i<=M;++i)
  23. for(int j=i;j<=M;j+=i)++sum[j];
  24. for(int i=1;i<=M;++i)sum[i]=(sum[i]+sum[i-1])%(YL-1);
  25. for(int i=1;i<=M;++i)sum_i[i]=1ll*ksm(i,sum[i])*sum_i[i-1]%YL;
  26. for(int i=1;i<=M;++i)sum[i]=1;
  27. for(int i=1;i<=M;++i)
  28. for(int j=i;j<=M;j+=i)sum[j]=1ll*sum[j]*inv[i]%YL;
  29. for(int i=2;i<=M;++i)sum[i]=1ll*sum[i]*sum[i-1]%YL;
  30. for(int i=2;i<=M;++i)sum[i]=1ll*sum[i]*sum[i-1]%YL;
  31. for(int i=1;i<=M;++i)sum[i]=1ll*sum[i]*sum_i[i]%YL;
  32. sum[0]=1;
  33. int t=in();
  34. while(t--)
  35. {
  36. int a=in(),b=in();
  37. printf("%lld\n",1ll*sum[b]*ksm(sum[a-1],YL-2)%YL);
  38. }
  39. return 0;
  40. }

洛谷P4902乘积的更多相关文章

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

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

  2. [洛谷P1887]乘积最大3

    题目大意:请你找出$m$个和为$n$的正整数,他们的乘积要尽可能的大.输出字典序最小的方案 题解:对于一些数,若它们的和相同,那么越接近它们的乘积越大. 卡点:无 C++ Code: #include ...

  3. [NOIP2000] 提高组 洛谷P1018 乘积最大

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

  4. 洛谷 P1018 乘积最大

    P1018 乘积最大 题目描述 今年是国际数学联盟确定的“ 20002000 ――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰 9090 周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学 ...

  5. 洛谷—— P1018 乘积最大

    https://www.luogu.org/problem/show?pid=1018#sub 题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年 ...

  6. 洛谷 P1018乘积最大

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

  7. java实现 洛谷 P1018 乘积最大

    import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner ci ...

  8. 洛谷P1018乘积最大——区间DP

    题目:https://www.luogu.org/problemnew/show/P1018 区间DP+高精,注意初始化和转移的细节. 代码如下: #include<iostream> # ...

  9. 纪中23日c组T2 2159. 【2017.7.11普及】max 洛谷P1249 最大乘积

    纪中2159. max 洛谷P1249 最大乘积 说明:这两题基本完全相同,故放在一起写题解 纪中2159. max (File IO): input:max.in output:max.out 时间 ...

随机推荐

  1. UVA 816 Abbott's Revenge 紫书

    紫书的这道题, 作者说是很重要. 但看着题解好长, 加上那段时间有别的事, 磨了几天没有动手. 最后,这道题我打了五遍以上 ,有两次被BUG卡了,找了很久才找到. 思路紫书上有,就缺少输入和边界判断两 ...

  2. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

  3. init命令详解

    基础命令学习目录首页 1.手动输入命令会执行相关操作   #init 0 - 停机(千万不能把initdefault 设置为0 )   #init 1 - 单用户模式   #init 2 - 多用户, ...

  4. node 集群与稳定

    node集群搭建好之后,还需要考虑一些细节问题. 性能问题 多个工作进程的存活状态管理 工作进程的平滑重启 配置或者静态数据的动态重新载入 其它细节 1 进程事件 Node子进程对象除了send()方 ...

  5. JDK动态代理的简单理解

    转载:http://www.cnblogs.com/luotaoyeah/p/3778183.html 动态代理 代理模式是 Java 中的常用设计模式,代理类通过调用被代理类的相关方法,提供预处理. ...

  6. FFmpeg简单转码程序--视频剪辑

    学习了雷神的文章,慕斯人分享精神,感其英年而逝,不胜唏嘘.他有分享一个转码程序<最简单的基于FFMPEG的转码程序>其中使用了filter(参考了ffmpeg.c中的流程),他曾说想再编写 ...

  7. 关于手机端h5上传图片配合exif.min.js,processImg.js的使用

    首先这里有个new FileReader()的概念,这是h5新增的,用来把文件读入内存,并且读取文件中的数据.FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件 ...

  8. C++ 函数 内联函数

    内联函数的功能和预处理宏的功能相似,在介绍内联函数之前,先介绍一下预处理宏.宏是简单字符替换,最常见的用法:定义了一个代表某个值的全局符号.定义可调用带参数的宏.作为一种约定,习惯上总是用大写字母来定 ...

  9. java equals()方法的注意事项

    1.在写代码的时候,我们有时候需要判断两个相同类的对象的值是否全部相等,很多人想到的就是equals()方法,但是equals方法真的是可以比较吗?其实equals方法比较的并不是两个对象的值,它只是 ...

  10. 【搜索】POJ-2718 全排列+暴力

    一.题目 Description Given a number of distinct decimal digits, you can form one integer by choosing a n ...