#include<bits/stdc++.h> using namespace std; #define int long long int p; int fastpo(int a, int b){ int wynik=1; int pot=a; while(b>0){ if(b%2) wynik*=pot; pot*=pot; wynik%=p; pot%=p; b/=2; } return wynik; } int32_t main(){ int a, b, c; cin >> a >> b >> c >> p; cout << a*b<<" "; vector<int> silnie(max(a*b + 8, a+b-1), 1); for(int i=1; i<silnie.size(); i++){ silnie[i] = silnie[i-1]*i % p; } int licznik = silnie[a*b]; for(int i=0; i<a; i++){ licznik*=silnie[i]; licznik%=p; } int mianownik=1; for(int i=0; i<a; i++){ mianownik*=silnie[b+i]; mianownik%=p; } int wynik = (licznik * fastpo(mianownik, p-2))%p; wynik = wynik*wynik%p; cout << wynik<<"\n"; }
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 | #include<bits/stdc++.h> using namespace std; #define int long long int p; int fastpo(int a, int b){ int wynik=1; int pot=a; while(b>0){ if(b%2) wynik*=pot; pot*=pot; wynik%=p; pot%=p; b/=2; } return wynik; } int32_t main(){ int a, b, c; cin >> a >> b >> c >> p; cout << a*b<<" "; vector<int> silnie(max(a*b + 8, a+b-1), 1); for(int i=1; i<silnie.size(); i++){ silnie[i] = silnie[i-1]*i % p; } int licznik = silnie[a*b]; for(int i=0; i<a; i++){ licznik*=silnie[i]; licznik%=p; } int mianownik=1; for(int i=0; i<a; i++){ mianownik*=silnie[b+i]; mianownik%=p; } int wynik = (licznik * fastpo(mianownik, p-2))%p; wynik = wynik*wynik%p; cout << wynik<<"\n"; } |