#include"lib.h" fc fi, fo; int mot[1000000], code[1000], mot2[1000000], sum[1000000], up[1000000]; int i, j, s, k, size, x, nb, mnb, pos, a_o, a_i, n, d, p, a, b, m; char prog[10000]; int out(int *m, int i){ return rep(m, i, n, d, p, 1); }//*/ int verif1(){//00 for(k = 0; k < size; k++) mot2[k] = mot2[k+size] = mot[k]; for(k = 0; k < size; k++) if(!fo(mot2, k+size)) return 0; /*for(k = 0; k < size; k++){ mot[k+size] = mot[k]; if(!fo(mot, k+size)) return 0; }*/ return 1; } int verif2(){//011001 for(k = 0; k < size; k++) mot2[k] = mot2[3*size+k] = mot2[4*size+k] = mot[k]; for(k = 0; k < size; k++) mot2[size+k] = mot2[2*size+k] = mot2[5*size+k] = mot[size+k]; for(k = 2*size; k < 6*size; k++) if(!fo(mot2, k)) return 0; return 1; } int ok(){ if(!fo(mot, i)) return 0; if(i < size) return 1; //for(k = 0; k <= i%size && mot[size+k] == mot[k]; k++); if(mot[size+k]) return 0; for(k = 0; k <= i%size; k++) mot2[2*size+k] = mot[size+k]; if(!fo(mot2, size+i)) return 0; return 1; } int A(){ *sum = *mot = 0; for(i = 0; i < 1000000; i++) up[i] = (a*(i+1)+m-1)/b; for(i = 0; i < size; i++) mot[i] = 0; mnb = nb = i = 0; printf("size=%d n/d=%.10f a/b=%.10f %s", size, 1.0*n/d, 1.0*a/b, prog); date(""); for(*mot = 1; ;) if(!ok()){ here: while(mot[i]) if(!i--) return 1; mot[i] = 1; }else if(i == size-1) if(!verif1()) goto here; else goto there; else if(i == 2*size-1) if(!verif2()) goto here; else break; else{ there: if(i) sum[i] = sum[i-1]+(!mot[i]); mot[++i] = (up[i] == sum[i-1]); } for(x = 0; x < a_i; x++, printf("\n")) for(k = 0; k < size; k++) printf("%d", mot[k+x*size]); printf("OK size=%d a/b=%.10f %s", size, 1.0*a/b, prog); date(""); return 0; } void usage(){ printf("Usage: 2cuf n d p a b m [size ]\n"); exit(0); } int main(int ac, char **av){ if(ac < 7) usage(); n = atoi(av[1]); d = atoi(av[2]); p = atoi(av[3]); a = atoi(av[4]); b = atoi(av[5]); m = atoi(av[6]); size = ac > 7 ? atoi(av[7]) : 2; a_i = 2; a_o = 2; fi = rt2; fo = out; sprintf(prog, "2cuf-%ds%d%s-%ds%d%s.txt", n, d, p ? "p" : "", a, b, m ? "p" : ""); //sprintf(prog, "%s-%ds%d%s-%ds%d%s.txt", basename(*av), n, d, p ? "p" : "", a, b, m ? "p" : ""); //for(; A() && size < 50000; size++); //size = b; for(; A() && size < 50000; size += b); }