#include<bits/stdc++.h> #define mp make_pair #define pb push_back #define int long long using namespace std; int n, m, p, a[10000009], dopasowania, cur; int pot(int pod, int wyk){ if(wyk==0) return 1; else if(wyk%2==0){ long long wyn=(pot(pod, wyk/2))%p; return (wyn*wyn)%p; } else return (pod*pot(pod, wyk-1)%p)%p; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); cin>>n>>m>>p; for(int i=1; i<=m; i++) a[i]=(a[i-1]+i)%p; for(int i=1; i<=m; i++){ for(int j=i; j<=m; j++){ cur=((a[m]-a[i-1]+p)%p-a[m-j]+p)%p; dopasowania=(dopasowania+cur)%p; //cout<<cur<<"\n"; //dopasowania=(dopasowania+cur)%p; //cout<<i<<" "<<j<<" "<<cur<<"\n"; //cout<<a[m]+dopasowania*(n-1)<<"\n"; } } //cout<<"\n"; //cout<<a[m]<<"\n"; //cout<<dopasowania<<"\n"; if(n==1) cout<<a[m]<<"\n"; else if(n==2) cout<<dopasowania<<"\n"; else cout<<(a[m]+((dopasowania*pot(m, n-2)%p)%p)%p)<<"\n"; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include<bits/stdc++.h> #define mp make_pair #define pb push_back #define int long long using namespace std; int n, m, p, a[10000009], dopasowania, cur; int pot(int pod, int wyk){ if(wyk==0) return 1; else if(wyk%2==0){ long long wyn=(pot(pod, wyk/2))%p; return (wyn*wyn)%p; } else return (pod*pot(pod, wyk-1)%p)%p; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); cin>>n>>m>>p; for(int i=1; i<=m; i++) a[i]=(a[i-1]+i)%p; for(int i=1; i<=m; i++){ for(int j=i; j<=m; j++){ cur=((a[m]-a[i-1]+p)%p-a[m-j]+p)%p; dopasowania=(dopasowania+cur)%p; //cout<<cur<<"\n"; //dopasowania=(dopasowania+cur)%p; //cout<<i<<" "<<j<<" "<<cur<<"\n"; //cout<<a[m]+dopasowania*(n-1)<<"\n"; } } //cout<<"\n"; //cout<<a[m]<<"\n"; //cout<<dopasowania<<"\n"; if(n==1) cout<<a[m]<<"\n"; else if(n==2) cout<<dopasowania<<"\n"; else cout<<(a[m]+((dopasowania*pot(m, n-2)%p)%p)%p)<<"\n"; return 0; } |