2d3d:: fixed Field Pattern

This commit is contained in:
Zeno Rogue 2019-05-10 02:40:44 +02:00
parent f491e3ce99
commit f2b0f33496
1 changed files with 9 additions and 7 deletions

View File

@ -9,6 +9,8 @@ namespace fieldpattern {
extern int subpathid; extern int subpathid;
extern int subpathorder; extern int subpathorder;
#define MWDIM (WDIM+1)
bool isprime(int n) { bool isprime(int n) {
for(int k=2; k<n; k++) if(n%k == 0) return false; for(int k=2; k<n; k++) if(n%k == 0) return false;
return true; return true;
@ -21,19 +23,19 @@ struct matrix {
}; };
bool operator == (const matrix& A, const matrix& B) { bool operator == (const matrix& A, const matrix& B) {
for(int i=0; i<MDIM; i++) for(int j=0; j<MDIM; j++) for(int i=0; i<MWDIM; i++) for(int j=0; j<MWDIM; j++)
if(A[i][j] != B[i][j]) return false; if(A[i][j] != B[i][j]) return false;
return true; return true;
} }
bool operator != (const matrix& A, const matrix& B) { bool operator != (const matrix& A, const matrix& B) {
for(int i=0; i<MDIM; i++) for(int j=0; j<MDIM; j++) for(int i=0; i<MWDIM; i++) for(int j=0; j<MWDIM; j++)
if(A[i][j] != B[i][j]) return true; if(A[i][j] != B[i][j]) return true;
return false; return false;
} }
bool operator < (const matrix& A, const matrix& B) { bool operator < (const matrix& A, const matrix& B) {
for(int i=0; i<MDIM; i++) for(int j=0; j<MDIM; j++) for(int i=0; i<MWDIM; i++) for(int j=0; j<MWDIM; j++)
if(A[i][j] != B[i][j]) return A[i][j] < B[i][j]; if(A[i][j] != B[i][j]) return A[i][j] < B[i][j];
return false; return false;
} }
@ -101,13 +103,13 @@ struct fpattern {
matrix mmul(const matrix& A, const matrix& B) { matrix mmul(const matrix& A, const matrix& B) {
matrix res; matrix res;
for(int i=0; i<MDIM; i++) for(int k=0; k<MDIM; k++) { for(int i=0; i<MWDIM; i++) for(int k=0; k<MWDIM; k++) {
int t = 0; int t = 0;
#ifdef EASY #ifdef EASY
for(int j=0; j<MDIM; j++) t += mul(A[i][j], B[j][k]); for(int j=0; j<MWDIM; j++) t += mul(A[i][j], B[j][k]);
t %= Prime; t %= Prime;
#else #else
for(int j=0; j<MDIM; j++) t = add(t, mul(A[i][j], B[j][k])); for(int j=0; j<MWDIM; j++) t = add(t, mul(A[i][j], B[j][k]));
#endif #endif
res[i][k] = t; res[i][k] = t;
} }
@ -215,7 +217,7 @@ struct fpattern {
int solve() { int solve() {
for(int a=0; a<MDIM; a++) for(int b=0; b<MDIM; b++) Id[a][b] = a==b?1:0; for(int a=0; a<MWDIM; a++) for(int b=0; b<MWDIM; b++) Id[a][b] = a==b?1:0;
if(!isprime(Prime)) { if(!isprime(Prime)) {
return 1; return 1;