本文主要是介绍烤面包片(思维题+数论),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题首先应该知道4!!!已经远远大于1e9了,而且由数论知识(唯一分解定理)可以知道:
一个大数肯定可以由素数的乘积组成,那么阶乘就可以想成:
那么一个很大的数肯定会有与Mod相等的因子,所以当n>=4的时候肯定n!!!%Mod0了;
reason:
因为24!!这个数相当大,所以因子以及足够包含1e9内所有数的因子个数和类别了;
那么 n0,1,2就可以手算,n==3就可以算3!!==720!枚举一遍就出来了,其实这道题主要是考 唯一分解定理,有了这个知识这道题就轻松解决了;
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<sstream>
#include<stack>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
#define Max 0x3f3f3f3f
//ll gcd(ll a,ll b){
// return b?gcd(b,a%b):a;
//}
//ll QM(ll x,ll n){
// ll res=1;
// while(n){
// if(n&1){
// res=(res*x)%Mod;
// }
// x=(x*x)%Mod;
// n>>=1;
// }
//}
int main(){ll n,Mod;scanf("%lld %lld",&n,&Mod);if(n>=4) return cout<<0<<endl,0;if(n==0||n==1) return cout<<1%Mod<<endl,0;if(n==2) return cout<<2%Mod<<endl,0;if(n==3) {ll ans=1;for(int i=1;i<=720;i++){ans=(ans*i)%Mod;}cout<<ans<<endl;} return 0;}
这篇关于烤面包片(思维题+数论)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!