[原创]LightOJ 1090 Trailing Zeroes (II) [分解]【数论】
[原创]LightOJ 1090 Trailing Zeroes (II) [分解]【数论】
2016-07-03 16:45:29 Tabris_ 阅读数:369
博客爬取于2020-06-14 22:44:15
以下为正文
版权声明:本文为Tabris原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/51815810
题目链接 :http://acm.hust.edu.cn/vjudge/contest/view.action?cid=120197#problem/Y
Trailing Zeroes (II)
Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu
Submit Status Practice LightOJ 1090
Description
Find the number of trailing zeroes for the following function:
***C(n,r) x p^q ***
where n, r, p, q are given. For example, if n = 10, r = 4, p = 1, q = 1, then the number is 210 so, number of trailing zeroes is 1.
Input
Input starts with an integer T (≤ 10000), denoting the number of test cases.
Each case contains four integers: n, r, p, q (1 ≤ n, r, p, q ≤ 106, r ≤ n).
Output
For each test case, print the case number and the number of trailing zeroes.
Sample Input
2
10 4 1 1
100 5 40 5
Sample Output
Case 1: 1
Case 2: 6
题目大意 : 就是求***C(n,r) x p^q *** 末尾有几个 0
题解 : 求末尾有几个0 就将其展开成(2^n) * (5^m) * k 然后输出min(n,m) 即可。。
但是数据量特别大 所以需要先预处理
用 five[N],two[N]出 N!中n,m的值(值的含义如上所述) 然后 稍加操作即可求出C(n,m)中n,m的值 (这里并不难,看代码就明白了)
剩下的p^q 就更好办了 p=(2^n) * (5^m) * k
求出的n,m的值在乘上q
最后加上C(n,m)中n,m的值 就是方程里n,m的值
总复杂度 O(1e6*(log(2,1e6)+log(5,1e6))+T *(log(2,p)+log(5,p)))
附本题代码
1 | # include <stdio.h> |