求阶乘取模的值。实际上这题的数据量不大,64位整形就可以了。代码没什么难度。
2个公式:
a%m+b%m=(a+b)%m;
(a%m)*(b%m)=(a*b)%m;
//Time : 203MS
//Memory : 224K
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
__int64 sum,mod;
int max,m,i,temp;
char n[101];
cin>>temp;
getchar();
while(temp--)
{
cin>>n>>m;
int l = strlen(n);
if(l >= 7)
max = m;
else
{
max = 0;
for( i = 0;i < l ; i++)
{
max = max * 10 + n[i] - '0';
if( max > m)
{
max = m;
break;
}
}
}
mod = 1;
sum = 1;
for(i = 1 ;i <= max ; i++)
{
mod = (mod * i) % m;
sum = (sum + mod) % m;
}
sum =sum%m;
cout<<sum<<endl;
}
return 0;
}