#include"lib.h" int mot[MAX], cl[MAX], up[MAX], m, k, s; int64_t a, b, c, d, cc, i, nmax; char prog[100]; void af(int64_t max){ printf("%lld cc=%lld %.10f %.10f %s", max, cc, 1.0*a/b, 1.0*c/d, prog); date(""); } int A(char ent[100]){ printf("a=%lld b=%lld a/b=%.10f c=%lld d=%lld c/d=%.10f suf:%s", a, b, 1.0*a/b, c, d, 1.0*c/d, ent); date(""); for(s = cc = 0; ent[s]; s++) mot[s] = ent[s]-'0'; cl[s] = mot[s] = 0; for(i = 0; i < s; i++) cl[i] = 0; for(; i < MAX; i++) up[i] = (b*c*(i-s+1)+m-1)/d; for(i = 0; i < MAX; i++) if(up[i] < 0) {printf("NEGATIF ent=%s i=%d\n", ent, i); break;} for(i = nmax = s; ;) if(cl[i] > up[i] || !sqf(mot, i)){ while(mot[i] == 2) if(--i < s) goto end; cl[i] += (mot[i]++ ? b-2*a : a); }else{ if((nmax < i) && (!((++nmax)%10000))) af(nmax); mot[++i] = 0; cl[i] = cl[i-1]; if(!((++cc)%100000000)) af(nmax); } end:af(nmax); return nmax+1; } void usage(){ printf("Usage: weight a b c d m\n"); exit(0); } int main(int ac, char **av){ if(ac != 6) usage(); a = atoi(av[1]); b = atoi(av[2]); c = atoi(av[3]); d = atoll(av[4]); m = atoll(av[5]); sprintf(prog, "%s-%llds%lld-%llds%lld%s.txt", basename(*av), a, b, c, d, m ? "p" : ""); A("0"); A("1"); A("202"); A("102"); A("2012"); A("21012"); A("0212"); date(""); }