现在的位置: 首页 > 综合 > 正文

阶乘取模

2014年05月18日 ⁄ 综合 ⁄ 共 556字 ⁄ 字号 评论关闭

Description

计算 
(0! + 1! + 2! + 3! + 4! + ... + n!)%m

Input

第一行输入t,表示测试数据组数
每组数据输入两个数n和m

0 < T <= 20
0 <= n < 10^100 (没有前导零)
0 < m < 1000000

Output

输出(0! + 1! + 2! + 3! + 4! + ... + n!)%m的答案

Sample Input

1
10 861017

Sample Output

593846

这道题注意的是每次运算都要取模,不然会很大,会数据溢出。
参考代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
__int64 i,s,t,m,n,temp;
char c[110];
scanf("%I64d",&t);
while(t--)
{
n=0;
temp=s=1;
scanf("%s",c);
scanf("%I64d",&m);
if(strlen(c)>7)
n=m;
else
for(i=0;i<strlen(c);i++)
n=10*n+c[i]-'0';
if(n>m)
n=m;
for(i=1;i<=n;i++)
{
temp*=i;
temp%=m;
s+=temp;
s%=m;
}
printf("%I64d\n",s%m);
}
return 0;
}

抱歉!评论已关闭.