Løsningsforslag - oppgaver i Avsnitt 1.7.17


Oppgave 1

  BitSet A = new BitSet();
  A.set(1,11);
  System.out.println("A = " + A);

Oppgave 2

  BitSet A = new BitSet();
  A.set(1,4); A.set(5); A.set(7,10);
  System.out.println("A = " + A);

eller

  BitSet A = new BitSet();
  A.set(1,10); A.set(4,false); A.set(6,false);
  System.out.println("A = " + A);

Oppgave 3

  BitSet A = new BitSet();
  for (int i = 1; i <= 1024; i *= 2) A.set(i);
  System.out.println("A = " + A);

Oppgave 4

  BitSet A = new BitSet(1025);
  for (int i = 1; i <= 1024; i *= 2) A.set(i);
  System.out.println("A = " + A);

Oppgave 5

Minste felles multiplum for 6 og 9 er 18. Dvs. at et tall er delelig med både 6 og 9 hvis og bare hvis det er delelig med 18. Snittet av A og B innholder tallene som er delelige med både 6 og 9 og det er 18, 36, 54, 72 og 90. Koden nedenfor gir det samme svaret:

  BitSet A = new BitSet(100);
  for (int i = 6; i < 100; i += 6) A.set(i);
  System.out.println(A);

  BitSet B = new BitSet(100);
  for (int i = 9; i < 100; i += 9) B.set(i);
  System.out.println(B);

  A.and(B);
  System.out.println(A);

Oppgave 6

Minste felles multiplum for 6 og 8 er 24. Dvs. at et tall er delelig med både 6 og 8 hvis og bare hvis det er delelig med 24. Snittet av A og B innholder tallene som er delelige med både 6 og 8 og det er 24, 48, 72 og 96. Koden nedenfor gir det samme svaret:

  BitSet A = new BitSet(100);
  for (int i = 6; i < 100; i += 6) A.set(i);
  System.out.println(A);

  BitSet B = new BitSet(100);
  for (int i = 8; i < 100; i += 8) B.set(i);
  System.out.println(B);

  A.and(B);
  System.out.println(A);

Oppgave 7

Bruk koden fra Oppgave 5 med or istedenfor and.

Oppgave 8

Bruk koden fra Oppgave 6 med or istedenfor and.

Oppgave 9

Bruk koden fra Oppgave 5 med andNot istedenfor and.

Oppgave 10

Bruk koden fra Oppgave 6 med andNot istedenfor and.

Oppgave 11

Minste felles multiplum for 6, 8 og 9 er 72. Dermed er det kun 72 blant tallene mindre enn 100 som er delelige med både 6, 8 og 9. Flg. kode gir samme svar:

  BitSet A = new BitSet(100);
  for (int i = 6; i < 100; i += 6) A.set(i);
  System.out.println(A);

  BitSet B = new BitSet(100);
  for (int i = 8; i < 100; i += 8) B.set(i);
  System.out.println(B);

  BitSet C = new BitSet(100);
  for (int i = 9; i < 100; i += 9) C.set(i);
  System.out.println(C);

  A.and(B);
  A.and(C);
  System.out.println(A);

Oppgave 12

Bruk koden fra Oppgave 5 med xor istedenfor and.

Oppgave 13

  BitSet A = new BitSet(100);
  for (int i = 6; i < 100; i += 6) A.set(i);
  System.out.println("A = " + A);

  BitSet B = new BitSet(100);
  for (int i = 9; i < 100; i += 9) B.set(i);
  System.out.println("B = " + B);

  int a = A.cardinality();
  int b = B.cardinality();

  BitSet C = (BitSet)A.clone();  // C er lik A
  A.or(B);                       // A = A union B
  System.out.println("A union B = " + A);
  int u = A.cardinality();       // antallet i A union B

  C.and(B);                      // C = A snitt B
  int s = C.cardinality();       // antallet i A snitt B
  System.out.println("A snitt B = " + C);

  System.out.println(u + " = " + a + " + " + b + " - " + s);

Oppgave 14

  BitSet A = new BitSet(1000);
  for (int i = 2; i < 1000; i++) A.set(i);
  int[] a = {2,3,5,7,11,13,17,19,23,29,31};

  for(int i = 0; i < a.length; i++)
  {
    int k = a[i];
    for (int j = 2*k; j < 1000; j += k) A.clear(j);
  }

  System.out.println(A);