#include <bits/stdc++.h>
using namespace std;
#define REP(i,a,b) for (int i = (a); i <= (b); ++i)
#define REPD(i,a,b) for (int i = (a); i >= (b); --i)
#define FORI(i,n) REP(i,1,n)
#define FOR(i,n) REP(i,0,int(n)-1)
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define vi vector<int>
#define ll long long
#define SZ(x) int((x).size())
#define DBG(v) cerr << #v << " = " << (v) << endl;
#define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++)
#define fi first
#define se second
// a*x + b*y = wynik = NWD(a,b)
int egcd(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
int d = egcd(b, a%b, y, x);
y = a - x*(a/b) - y;
x = b - x;
return d;
}
int inv(int a, int p) {
int x,y;
egcd(a%p + p, p, x, y);
return x%p;
}
int main() {
int a,b,c,p;
scanf("%d%d%d%d", &a, &b, &c, &p);
int n = a*b;
int num = 1, den = 1;
FORI(i,n) num = 1LL * num * i % p;
FORI(i,a) FORI(j,b) den = 1LL * den * (i+j-1) % p;
int ans = 1LL * num * inv(den,p) % p;
ans = 1LL * ans * ans % p;
printf("%d %d\n", n, ans);
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 48 49 50 51 52 53 54 | #include <bits/stdc++.h> using namespace std; #define REP(i,a,b) for (int i = (a); i <= (b); ++i) #define REPD(i,a,b) for (int i = (a); i >= (b); --i) #define FORI(i,n) REP(i,1,n) #define FOR(i,n) REP(i,0,int(n)-1) #define mp make_pair #define pb push_back #define pii pair<int,int> #define vi vector<int> #define ll long long #define SZ(x) int((x).size()) #define DBG(v) cerr << #v << " = " << (v) << endl; #define FOREACH(i,t) for (typeof(t.begin()) i=t.begin(); i!=t.end(); i++) #define fi first #define se second // a*x + b*y = wynik = NWD(a,b) int egcd(int a, int b, int &x, int &y) { if (b == 0) { x = 1; y = 0; return a; } int d = egcd(b, a%b, y, x); y = a - x*(a/b) - y; x = b - x; return d; } int inv(int a, int p) { int x,y; egcd(a%p + p, p, x, y); return x%p; } int main() { int a,b,c,p; scanf("%d%d%d%d", &a, &b, &c, &p); int n = a*b; int num = 1, den = 1; FORI(i,n) num = 1LL * num * i % p; FORI(i,a) FORI(j,b) den = 1LL * den * (i+j-1) % p; int ans = 1LL * num * inv(den,p) % p; ans = 1LL * ans * ans % p; printf("%d %d\n", n, ans); return 0; } |
English