本文主要是介绍CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)C ——烤面包片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
鸡尾酒最喜欢吃东北的烤面包片了。每次到东北地区的区域赛或者是秦皇岛的wannafly camp,鸡尾酒都会吃很多的烤面包片,即使比赛打铁也觉得不枉此行。
“我想吃烤面包片!!!”这不,半年没吃烤面包片的鸡尾酒看到大家都聚集在秦皇岛参加暑假camp,羡慕地发出了想要的声音。
当鸡尾酒“想要”的时候,他说的话会带三个感叹号来表示非常“想要”。至于有多“想要”,他给了你一个算式让你来体会。
给你两个整数 nn 和 modmod,输出 n!!!n!!! 对 modmod 求余的结果(每个!! 都代表一个阶乘符号)
输入描述
输入共一行包含两个整数依序为 nn 和 modmod,意义如题面所示。(0 \le n \le 10^9,1 \le mod \le 10^90≤n≤109,1≤mod≤109)
输出描述
输出一个小于 modmod 的非负整数表示答案。
样例输入 1
2 6324
样例输出 1
2
样例输入 2
3 999999999
样例输出 2
731393874
提示
在第一个样例中,由于 2! = 22!=2,所以 2!!! = (((2!)!)!) = ((2!)!) = (2!) = 22!!!=(((2!)!)!)=((2!)!)=(2!)=2。2模了6324还是2!
所以答案为2
思路:
根据范围可得4!!一定大于1e9(事实上甚至大于1e18),所以4!!!一定能被mod整除(因为4!!!算的时候,4!!里的所有数,全都出现过,当有一个数整除了mod那么结果就是0),所以我们只需要判断n<=3的情况
#include<iostream>
using namespace std;
long long n,mod;
int main(){cin>>n>>mod;if(n==0){cout<<1%mod<<endl;}else if(n==1){cout<<n%mod<<endl;}else if(n==2){cout<<n%mod<<endl;}else if(n==3){long long sum=1;for(int i=1;i<=720;i++){sum=(sum*i)%mod;}cout<<sum%mod<<endl;}else{cout<<"0"<<endl;}return 0;
}
这篇关于CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)C ——烤面包片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!