题目大意

给定 $n$($1\le n\le 1000$)个正整数 $a_1, a_2, \dots, a_n$($a_i \le 10^{12}$),令 $s$ 为这 $n$ 个数之和。求
$$
\frac{s! } {\prod\limits_{1\le i\le n} a_i !} \bmod 10
$$

解法

中国剩余定理。

设上式中左边的商为 $x$,先分别求出 $x \bmod 2$ 和 $x\bmod 5$, 再利用中国剩余定理就可求得答案。

这个问题归结为:
对于素数 $p$ 和正整数 $n$,将 $n!$ 写成 $n! = ap^{k}$,且 $p$ 不是 $a$ 的因子。求 $a$ 和 $k$ 。

不难发现:
设 $n$ 的 $p$-进制展开式为
$$ n = b_0 + b_1 p + b_2 p^2 + \dots + b_r p^r \qquad ( 0 \le b_i \in \mathbb{Z} < p, b_r > 0) $$

则有
\begin{align}
k & = [n/p] + [n/p^2] + [n/p^3] + \dots + [n/p^r] \\
a & \equiv (p-1)!^{k} b_0! b_1! \dots b_r! \pmod{p} \label{Eq:2}
\end{align}

其中 $[x]$ 表示不超过 $x$ 的最大整数。
(令 $B = b_0 + b_1 + ... + b_r$,不难证明,$k$ 还可以写成 $k = \frac{n - B}{p-1}$)

根据 Wilson 定理,\eqref{Eq:2} 可写成
\begin{equation}
a \equiv (-1)^{k} b_0! b_1! \dots b_r ! \pmod{p}
\end{equation}

算法的复杂度为 $O(p + \log_p n)$ 。

从这个问题中积累的新模型
一、$\frac{A}{B}\bmod p$($B$ 能整除 $A$ 且 $p$ 是素数)的解法。
二、$n! \bmod p$($p$ 是素数) 的解法。


下面考虑:模数不是 $10$ 而是 $20$ 的情况下,此题如何求解。

仍循旧思路,采用中国剩余定理,我们需要求出 $x \bmod 4$;按旧办法求当然是可以的。注意:由于要预处理出 $0$ 到 $p-1$ 的阶乘,所以(对于旧思路)能否用 Wilson 定理并不影响复杂度。

如果模数的某个素因子的次数 $k$ 很高,求 $x \bmod p^k$ 的复杂度 $O(p^k + \log_{p^k} n)$ 就不能容忍了。很自然地,我们会考虑 $x\bmod p$ 与 $x\bmod p^k$ 之间的关系。
(留坑)

hihoCoder #1639 图书馆的更多相关文章

  1. Hihocder 1639 : 图书馆 (组合数+唯一分解 求最后一位)(妙)

    给定n,(n<=10^3),然后输入n的数a[i],(a[i]<=1e10),求ans=(a1+a2+a3...an)! / (a1!*a2!*a3!...an!) 的结果的最一位数. 适 ...

  2. hihoCoder 1383 : The Book List(书目表)

    hihoCoder #1383 : The Book List(书目表) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 The histo ...

  3. hihocoder -1121-二分图的判定

    hihocoder -1121-二分图的判定 1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Net ...

  4. Hihocoder 太阁最新面经算法竞赛18

    Hihocoder 太阁最新面经算法竞赛18 source: https://hihocoder.com/contest/hihointerview27/problems 题目1 : Big Plus ...

  5. hihoCoder太阁最新面经算法竞赛15

    hihoCoder太阁最新面经算法竞赛15 Link: http://hihocoder.com/contest/hihointerview24 题目1 : Boarding Passes 时间限制: ...

  6. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

  7. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  8. 【hihoCoder】1148:2月29日

    问题:http://hihocoder.com/problemset/problem/1148 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 思路: 1. 将问题转换成求两个日 ...

  9. 【hihoCoder】1288 : Font Size

    题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...

随机推荐

  1. GBDT为什么不能并行,XGBoost却可以

    传统的GBDT是以CART作为基分类器,xgboost还支持线性分类器,这个时候XGBOOST相当于带L1和L2正则化的逻辑斯蒂回归(分类问题)或者线性回归(回归问题).传统的GBDT在优化的hih只 ...

  2. 三边定位 c#

    MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分. 项目中用到三 ...

  3. JavaScript 中函数的定义和调用

    3种函数定义方式: 1.使用关键字 function 来声明并定义函数 function myFunction(a, b) { return a * b; } 调用函数: var x = myFunc ...

  4. 第六篇 native 版本的Postman如何通过代理服务器录制Web及手机APP请求

    第四篇主要介绍了chrome app版本的postman如何安装及如何录制Web脚本,比较简单. 但是chrome app 版本和native 版本相比,对应chrome app 版本官方已经放弃支持 ...

  5. nginx main函数

    源代码: int ngx_cdecl main(int argc, char *const *argv) { ngx_int_t i; ngx_log_t *log; ngx_cycle_t *cyc ...

  6. Spring Task中的定时任务无法注入service的解决办法

    1.问题 因一个项目(使用的是Spring+SpringMVC+hibernate框架)需要在spring task定时任务中调用数据库操作,在使用 @Autowired注入service时后台报错, ...

  7. python基础-02-while格式化逻辑运算

    python其他知识目录 1.循环打印“我是小马过河” while True:    print('我是小马过河') #4.用while从一打印到10 #5.请通过循环,1 2 3 4 5 6 8 9 ...

  8. python2/3 发送https请求时,告警关闭方法

    问题: 使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误: InsecureRequestWarning: Unverifi ...

  9. 字符串拆分和拼接(含list拼接)---基于python

    最近得一超长字符串如下: l=“5245474953544552207369703a3137322e3136312e31302e323232205349502f322e300d0a5669613a20 ...

  10. Cube Stacking P0J 1988(加权并查集)

    Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes ...