Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #define MAXM 10000000
- using namespace std;
- long long int mod;
- int dp[MAXM+1];
- int pow (int base, int power) {
- if (power==0) return 1;
- if (power%2==1) return (base*pow(base,power-1))%mod;
- long long int num=pow(base,power/2);
- return (num*num)%mod;
- }
- int main () {
- long long int n,i,fact,num,val;
- cin >> n >> mod ;
- dp[1]=1; dp[2]=1;
- fact=2;
- if (n==1) {
- cout << 0 << endl ;
- return 0;
- }
- for (i=3; i<=min(n,mod); i++) {
- dp[i]=((i-1)*dp[i-1]+(i-2)*dp[i-2])%mod;
- fact*=i; fact%=mod;
- }
- if (n<=mod) {
- cout << (fact+mod-dp[n])%mod << endl ;
- return 0;
- }
- num=pow((mod-dp[mod-1])%mod,(n-1)/mod);
- if (n%mod==0) val=(num*dp[mod])%mod;
- else val=(num*dp[n%mod])%mod;
- cout << (mod-val)%mod ;
- cout << endl ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement