题目描述
鸡尾酒最喜欢吃东北的烤面包片了。每次到东北地区的区域赛或者是秦皇岛的wannafly camp,鸡尾酒都会吃很多的烤面包片,即使比赛打铁也觉得不枉此行。
“我想吃烤面包片!!!”这不,半年没吃烤面包片的鸡尾酒看到大家都聚集在秦皇岛参加暑假camp,羡慕地发出了想要的声音。
当鸡尾酒“想要”的时候,他说的话会带三个感叹号来表示非常“想要”。至于有多“想要”,他给了你一个算式让你来体会。
给你两个整数 nnn 和 modmodmod,输出 n!!!n!!!n!!! 对 modmodmod 求余的结果(每个!!! 都代表一个阶乘符号)
提示
在第一个样例中,由于 2!=22! = 22!=2,所以 2!!!=(((2!)!)!)=((2!)!)=(2!)=22!!! = (((2!)!)!) = ((2!)!) = (2!) = 22!!!=(((2!)!)!)=((2!)!)=(2!)=2。2模了6324还是2!
所以答案为2。
首先4!!已经大于1e9了因为是阶乘一定会乘到一个m所以肯定会被整除所以特判0,1,2,3就行了而3的三阶乘会超也要根据m来算。
#include <iostream>
#include <cmath>
#include<algorithm>
#include<stack>
#include<string.h>
#include<cstdio>
#include<set>
using namespace std;
//int maxx,minn,j,k,a[100000];
//int n,x[100009],ans=0,a[100009],y[100009],l[100090],r[100090];
bool v[6];
int a[100009][6],maxx=-1,t;
long long n,m;
long long int jc(long long int n)
{
if(n==1)
return 1;
return (n*jc(n-1));
}
int main()
{
long long int a[4]= {1,1,2,1};
while(cin>>n>>m)
{
if(n>=4)
cout<<0;
else
{
if(n==3)
{
for(int i=1; i<=720; i++)
{
a[3]=i*a[3]%m;
// cout<<(a[3]+m)%m<<endl;
}
}
cout<<(a[n]+m)%m;
}
cout<<endl;
}
}