1 10 861017
593846
n大于m的部分不需要求,取模后等于0了嘛
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <cmath>
#define N 1000009
using namespace std;
char s[N];
int m;
int main()
{
int ca;
scanf("%d",&ca);
while(ca--)
{
int ff=0;
scanf("%s%d",s,&m);
int len=strlen(s);
int num=0;
if(len>=7)
ff=m;
else
{
for(int i=0;i<len;i++)
{
int a=s[i]-'0';
num+=a;
num*=10;
}
num/=10;
if(num>=m)
{
ff=m-1;
}
else ff=num;
}
__int64 ans=0;
__int64 t=1;
for(int i=1;i<=ff;i++)
{
t*=i;
t%=m;
ans+=t;
ans%=m;
}
ans=(ans+1)%m;//如果开始ans取1后再求mod的话会wa,但是最后加1再取mod就过了
printf("%I64d\n",ans);
}
return 0;
}
原文:http://blog.csdn.net/wust_zjx/article/details/45874629