Liczby podzielnych przez 3 i równocześnie niepodzielne przez 7 w przedziale liczbowym domkniętym

0

Cześć chciałbym napisać program który sprawdza ilość liczb podzielnych przez 3 i równocześnie niepodzielnych przez 7 w przedziale liczbowym <a,b>. Wartości a i b są podawane przez użytkownika. Mam już część z liczbami podzielnymi przez 3, ale nie wiem jak zrobić tę drugą część z l. niepodzielnymi przez 7. Proszę o pomoc

#include <iostream>
using namespace std;

int main()
  {
   int a,b,k;
   cout<<"Podaj a:";
   cin>>a;
   cout<<"Podaj b:";
   cin>>b;


   cout<<"Ilosc liczb podzielnych przez 3 wynosi:"<<'\t'<<(b+3)/3-(a+2)/3<<endl;
  }
0

Może da się to lepiej zrobić, ale ja na pierwszy rzut oka widzę 2 rozwiązania

  1. iterujesz po przedziale i sprawdzasz
  2. dzielisz przedział na 3 przedziały [a, x1], [x1, x2], [x2, b], gdzie x1 i x2 to najbliższe krańcom przedziałów (a i b) liczby podzielne przez 3 i 7. Zewnętrzne przedziały liczysz iterując, wewnętrzny ze wzoru.
1
if (a%3 == 0 & a%7 == 1) iter++
0
Brusli napisał(a):

Cześć chciałbym napisać program który sprawdza ilość liczb podzielnych przez 3 i równocześnie niepodzielnych przez 7

Czyli podzielne przez 21, jako że to są liczby pierwsze. Jeśli to nie byłyby liczb pierwsze to wtedy std::lcm.
Czyli liczysz wszystkie podzielne przez 3 i odejmujesz wszystkie podzielne przez 21.

Brusli napisał(a):

w przedziale liczbowym <a,b>.

divBy3Count = b / 3 - ((a - 1) / 3);
divBy21Count  = b / 21 - ((a - 1) / 21);
result = divBy3Count - divBy21Count;

przy czym jeśli wziąć pod uwagę liczby ujemne, to trzeba to poprawić (dzielnie całkowite zwykle odbywa się w stronę zera).

1 użytkowników online, w tym zalogowanych: 0, gości: 1