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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <utility> #include <vector> std::vector< std::pair<int, int> > factor_table; void fill_sieve( int n ) { factor_table.resize(n+1); for( int i = 1; i <= n; ++i ) factor_table[i] = std::pair<int, int>(i, 1); for( int j = 2, j2 = 4; j2 <= n; (j2 += j), (j2 += ++j) ) { if (factor_table[j].second == 1) { int i = j; int ij = j2; while (ij <= n) { factor_table[ij] = std::pair<int, int>(j, i); ++i; ij += j; } } } } std::vector<unsigned> powers; template<int dir> void factor( int num ) { while (num != 1) { powers[factor_table[num].first] += dir; num = factor_table[num].second; } } template<unsigned N> void calc_combinations(unsigned (&bin_sizes)[N]) { using std::swap; powers.resize(0); if (N < 2) return; unsigned& largest = bin_sizes[0]; size_t sum = largest; for( int bin = 1; bin < N; ++bin ) { unsigned& this_bin = bin_sizes[bin]; sum += this_bin; if (this_bin > largest) swap(this_bin, largest); } fill_sieve(sum); powers.resize(sum+1); for( unsigned i = largest + 1; i <= sum; ++i ) factor<+1>(i); for( unsigned bin = 1; bin < N; ++bin ) for( unsigned j = 2; j <= bin_sizes[bin]; ++j ) factor<-1>(j); } #include <iostream> #include <cmath> int main(void) { unsigned bin_sizes[] = { 8, 1, 18, 19, 10, 10, 7, 18, 7, 2, 16, 8, 5, 8, 2, 3, 19, 19, 12, 1, 5, 7, 16, 0, 1, 3, 13, 15, 13, 9, 11, 6, 15, 4, 14, 4, 7, 13, 16, 2, 19, 16, 10, 9, 9, 6, 10, 10, 16, 16 }; calc_combinations(bin_sizes); char* sep = ""; for( unsigned i = 0; i < powers.size(); ++i ) { if (powers[i]) { std::cout << sep << i; sep = " * "; if (powers[i] > 1) std::cout << "**" << powers[i]; } } std::cout << "\n\n"; } |
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDx2ZWN0b3I+CgpzdGQ6OnZlY3Rvcjwgc3RkOjpwYWlyPGludCwgaW50PiA+IGZhY3Rvcl90YWJsZTsKdm9pZCBmaWxsX3NpZXZlKCBpbnQgbiApCnsKCWZhY3Rvcl90YWJsZS5yZXNpemUobisxKTsKCWZvciggaW50IGkgPSAxOyBpIDw9IG47ICsraSApCgkJZmFjdG9yX3RhYmxlW2ldID0gc3RkOjpwYWlyPGludCwgaW50PihpLCAxKTsKCWZvciggaW50IGogPSAyLCBqMiA9IDQ7IGoyIDw9IG47IChqMiArPSBqKSwgKGoyICs9ICsraikgKSB7CgkJaWYgKGZhY3Rvcl90YWJsZVtqXS5zZWNvbmQgPT0gMSkgewoJCQlpbnQgaSA9IGo7CgkJCWludCBpaiA9IGoyOwoJCQl3aGlsZSAoaWogPD0gbikgewoJCQkJZmFjdG9yX3RhYmxlW2lqXSA9IHN0ZDo6cGFpcjxpbnQsIGludD4oaiwgaSk7CgkJCQkrK2k7CgkJCQlpaiArPSBqOwoJCQl9CgkJfQoJfQp9CgpzdGQ6OnZlY3Rvcjx1bnNpZ25lZD4gcG93ZXJzOwoKdGVtcGxhdGU8aW50IGRpcj4Kdm9pZCBmYWN0b3IoIGludCBudW0gKQp7Cgl3aGlsZSAobnVtICE9IDEpIHsKCQlwb3dlcnNbZmFjdG9yX3RhYmxlW251bV0uZmlyc3RdICs9IGRpcjsKCQludW0gPSBmYWN0b3JfdGFibGVbbnVtXS5zZWNvbmQ7Cgl9Cn0KCnRlbXBsYXRlPHVuc2lnbmVkIE4+CnZvaWQgY2FsY19jb21iaW5hdGlvbnModW5zaWduZWQgKCZiaW5fc2l6ZXMpW05dKQp7Cgl1c2luZyBzdGQ6OnN3YXA7CgoJcG93ZXJzLnJlc2l6ZSgwKTsKCWlmIChOIDwgMikgcmV0dXJuOwoKCXVuc2lnbmVkJiBsYXJnZXN0ID0gYmluX3NpemVzWzBdOwoJc2l6ZV90IHN1bSA9IGxhcmdlc3Q7Cglmb3IoIGludCBiaW4gPSAxOyBiaW4gPCBOOyArK2JpbiApIHsKCQl1bnNpZ25lZCYgdGhpc19iaW4gPSBiaW5fc2l6ZXNbYmluXTsKCQlzdW0gKz0gdGhpc19iaW47CgkJaWYgKHRoaXNfYmluID4gbGFyZ2VzdCkgc3dhcCh0aGlzX2JpbiwgbGFyZ2VzdCk7Cgl9CglmaWxsX3NpZXZlKHN1bSk7CgoJcG93ZXJzLnJlc2l6ZShzdW0rMSk7Cglmb3IoIHVuc2lnbmVkIGkgPSBsYXJnZXN0ICsgMTsgaSA8PSBzdW07ICsraSApIGZhY3RvcjwrMT4oaSk7Cglmb3IoIHVuc2lnbmVkIGJpbiA9IDE7IGJpbiA8IE47ICsrYmluICkKCQlmb3IoIHVuc2lnbmVkIGogPSAyOyBqIDw9IGJpbl9zaXplc1tiaW5dOyArK2ogKSBmYWN0b3I8LTE+KGopOwp9CgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxjbWF0aD4KaW50IG1haW4odm9pZCkKewoJdW5zaWduZWQgYmluX3NpemVzW10gPSB7IDgsIDEsIDE4LCAxOSwgMTAsIDEwLCA3LCAxOCwgNywgMiwgMTYsIDgsIDUsIDgsIDIsIDMsIDE5LCAxOSwgMTIsIDEsIDUsIDcsIDE2LCAwLCAxLCAzLCAxMywgMTUsIDEzLCA5LCAxMSwgNiwgMTUsIDQsIDE0LCA0LCA3LCAxMywgMTYsIDIsIDE5LCAxNiwgMTAsIDksIDksIDYsIDEwLCAxMCwgMTYsIDE2IH07CgljYWxjX2NvbWJpbmF0aW9ucyhiaW5fc2l6ZXMpOwoJY2hhciogc2VwID0gIiI7Cglmb3IoIHVuc2lnbmVkIGkgPSAwOyBpIDwgcG93ZXJzLnNpemUoKTsgKytpICkgewoJCWlmIChwb3dlcnNbaV0pIHsKCQkJc3RkOjpjb3V0IDw8IHNlcCA8PCBpOwoJCQlzZXAgPSAiICogIjsKCQkJaWYgKHBvd2Vyc1tpXSA+IDEpCgkJCQlzdGQ6OmNvdXQgPDwgIioqIiA8PCBwb3dlcnNbaV07CgkJfQoJfQoJc3RkOjpjb3V0IDw8ICJcblxuIjsKfQo=
-
upload with new input
-
result: Success time: 0.01s memory: 2816 kB returned value: 0
999 999
2**93 * 3**61 * 5**41 * 7**29 * 11**28 * 13**21 * 17**23 * 19**22 * 23**21 * 29**16 * 31**15 * 37**13 * 41**11 * 43**11 * 47**10 * 53**9 * 59**8 * 61**8 * 67**7 * 71**6 * 73**6 * 79**6 * 83**5 * 89**5 * 97**5 * 101**4 * 103**4 * 107**4 * 109**4 * 113**4 * 127**3 * 131**3 * 137**3 * 139**3 * 149**3 * 151**3 * 157**3 * 163**2 * 167**2 * 173**2 * 179**2 * 181**2 * 191**2 * 193**2 * 197**2 * 199**2 * 211**2 * 223**2 * 227**2 * 229**2 * 233**2 * 239**2 * 241**2 * 251 * 257 * 263 * 269 * 271 * 277 * 281 * 283 * 293 * 307 * 311 * 313 * 317 * 331 * 337 * 347 * 349 * 353 * 359 * 367 * 373 * 379 * 383 * 389 * 397 * 401 * 409 * 419 * 421 * 431 * 433 * 439 * 443 * 449 * 457 * 461 * 463 * 467 * 479 * 487
-
result: Success time: 0.02s memory: 2860 kB returned value: 0
2**93 * 3**61 * 5**41 * 7**29 * 11**28 * 13**21 * 17**23 * 19**22 * 23**21 * 29**16 * 31**15 * 37**13 * 41**11 * 43**11 * 47**10 * 53**9 * 59**8 * 61**8 * 67**7 * 71**6 * 73**6 * 79**6 * 83**5 * 89**5 * 97**5 * 101**4 * 103**4 * 107**4 * 109**4 * 113**4 * 127**3 * 131**3 * 137**3 * 139**3 * 149**3 * 151**3 * 157**3 * 163**2 * 167**2 * 173**2 * 179**2 * 181**2 * 191**2 * 193**2 * 197**2 * 199**2 * 211**2 * 223**2 * 227**2 * 229**2 * 233**2 * 239**2 * 241**2 * 251 * 257 * 263 * 269 * 271 * 277 * 281 * 283 * 293 * 307 * 311 * 313 * 317 * 331 * 337 * 347 * 349 * 353 * 359 * 367 * 373 * 379 * 383 * 389 * 397 * 401 * 409 * 419 * 421 * 431 * 433 * 439 * 443 * 449 * 457 * 461 * 463 * 467 * 479 * 487


