#include"lib.h" int mot[MAX], cl[MAX], up[MAX], m, n, d, p, k; int64_t a, b, cc; FILE *out ; char prog[100]; void aff(int max){ printf("%d cc=%lld %.10f %s", max, cc, 1.0*a/b, prog); date(""); }//*/ /*void aff(int max){ out = fopen(prog, "wt"); fprintf(out, "%d cc=%lld %.10f\n", max, cc, 1.0*a/b); printf("%d cc=%lld %.10f %s\n", max, cc, 1.0*a/b, prog); for(k = 0; k < max; k++) fprintf(out, "%d%s", mot[k], k % b == b-1 ? "\n" : ""); fclose(out); }//*/ int A(char ent[100]){ int i, nmax, l; printf("n=%d d=%d n/d=%.10f a=%lld b=%lld a/b=%.10f suf:%s", n, d, 1.0*n/d, a, b, 1.0*a/b, ent); date(""); for(l = cc = 0; ent[l]; l++) mot[l] = ent[l]-'0'; mot[l] = 1; for(i = 0; i < l; i++) cl[i] = 0; for(; i < MAX; i++) up[i] = (a*(i-l+1)+m-1)/b; for(i = 0; i < MAX; i++) if(up[i] < 0) {printf("NEGATIF ent=%s i=%d\n", ent, i); break;} for(i = nmax = l; i >= l;) if(!rep(mot, i, n, d, p, 1)){ while(mot[i]) i--; mot[i] = 1; } else{ cl[i] = cl[i-1]+(!mot[i]); if((nmax < i) && (!((++nmax)%1000))) aff(nmax); mot[++i] = (up[i] == cl[i-1]); if(!((++cc)%100000000)) aff(nmax); } aff(nmax); return nmax+1; } void usage(){ printf("Usage: pow n d p a b m\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 = atoll(av[4]); b = atoll(av[5]); m = atoi(av[6]); sprintf(prog, "%s-%ds%d%s-%llds%lld%s.txt", basename(*av), n, d, p ? "p" : "", a, b, m? "p" : ""); //A("1"); //A("10"); //A("100"); // < 8/3 A("01100"); A("0100"); // > 8/3 //A("101100"); // > 3 //A("110111010"); /*A("01110"); A("110110"); A("11010");//*/ //A("01110"); //A("0110"); //A("10110111010"); //A("101110111010"); //A("1"); //A("10110"); //A("101110"); //A("11010"); //A("101110111010"); //A("1101110110111010"); //A("111011101110"); //A("1110111101110"); /*int xx = 4; n = atoi(av[1]); d = 1; p = 0; a = n*n+xx*n-xx-2; b = n*n*n+xx*n*n-(xx+3)*n-xx-1; m = 0; sprintf(prog, "%s-%ds%d%s-%llds%lld%s.txt", basename(*av), n, d, p ? "p" : "", a, b, m? "p" : ""); A("1"); A("10"); A("00");//*/ date(""); }