Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <algorithm>
- #include <string.h>
- using namespace std;
- void print(int bits, int n) {
- for (int i = 0; i < n; i++) {
- printf("%d ", (bits >> i) & 1);
- }
- printf("\n\n");
- return;
- }
- int valid(int mask, int k, int n) {
- int bad[30];
- int bit;
- if (k == 1) {
- return 0;
- }
- memset(bad, 0, sizeof(bad));
- for (int i = 1; i <= n; i++) {
- bit = (mask >> (i - 1)) & 1;
- if (bit) {
- if (bad[i]) {
- return 0;
- } else if (i * k <= n) {
- bad[i * k] = 1;
- }
- }
- }
- return 1;
- }
- int main(void) {
- //int n = 16;
- int r;
- int aux;
- int bits;
- for (int n = 1; n <= 10; n++) {
- for (int k = 1; k <= n; k++) {
- r = 0;
- bits = 0;
- for (int mask = 1 << n; mask >= 0; mask--) {
- if (valid(mask, k, n)) {
- aux = __builtin_popcount(mask);
- if (r < aux) {
- r = aux;
- bits = mask;
- }
- }
- }
- printf("k = %d, r = %d - ", k, r);
- print(bits, n);
- printf("%d\n", r);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment