GCCTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 5140 Accepted Submission(s): 1716
Problem Description
The GNU Compiler Collection (usually shortened to GCC) is a compiler system produced by the GNU Project supporting various programming languages. But it doesn’t contains the math operator “!”.
In mathematics the symbol represents the factorial operation. The expression n! means "the product of the integers from 1 to n". For example, 4! (read four factorial) is 4 × 3 × 2 × 1 = 24. (0! is defined as 1, which is a neutral element in multiplication, not multiplied by anything.) We want you to help us with this formation: (0! + 1! + 2! + 3! + 4! + ... + n!)%m
Input
The first line consists of an integer T, indicating the number of test cases.
Each test on a single consists of two integer n and m.
Output
Output the answer of (0! + 1! + 2! + 3! + 4! + ... + n!)%m.
Constrains 0 < T <= 20 0 <= n < 10^100 (without leading zero) 0 < m < 1000000
Sample Input
Sample Output
Source
Recommend
思路:
这道题的数据是10的100次方,数据大的让我比赛的时候就选择性放弃了。。。。
其实这道题不难,这道题就是求阶层和取余,因为(a+b)%m=(a%m)+(b%m),因为取余的m较小,根据公式又知道大于等于m的阶乘一定为0,
所以最大只需要算到m-1位就行,所以这个题目就简单了。
下面给出两种求连续阶乘和的O(n)算法。
1.(1!+2!+...+n!) 可以化解为1+1*(1+2*(1+3*(1+4*(1+5(.....(n-1)*(n)))))) ;如果不理解就直接记住。
2.如果要算1到k的阶乘和
因为j虽然只从1乘到了k,但是sum每次加上的都是j的阶乘,这样就不用去写双循环了。
我的代码用的是第一种方法,两种都可。
|
hdu3123--阶乘和的处理方法
最新推荐文章于 2020-03-23 22:26:17 发布