Hdu 3123
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
提示: n!对于n大于m的时候 n!%m=0 因为n的阶乘包括m
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,n,m,cas,t;
__int64 mid,sum;
char s[1000];
scanf("%d",&cas);
while(cas--)
{
scanf("%s %d",&s,&m);
if(strlen(s)>=7)
t=m;
else sscanf(s,"%d",&t);
mid=1;
sum=1;
for(i=1;i<=t;i++)
{
mid=(mid*i)%m;
sum=(sum+mid)%m;
}
printf("%I64d\n",sum%m);//这里一定一定要%m 否则会错
}
return 0;
}
本文提供Hdu3123题目的解决方案,该题要求计算从0!到n!之和并对m取模。通过分析阶乘特性,当n大于m时n!%m为0,利用这一特点实现高效计算。
283

被折叠的 条评论
为什么被折叠?



