Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Определите количество натуральных чисел, не превосходящих 1000, которые не делятся ни на 3, ни на 5, ни на 7, ни на 11

DL_time Ученик (192), открыт 1 неделю назад
4 ответа
Dmitry Shakirov Ученик (178) 1 неделю назад
1. Найдем количество чисел, не превышающих 1000, которые делятся на 3, 5, 7 и 11.

Чисел, делящихся на 3: 1000 / 3 = 333.
Чисел, делящихся на 5: 1000 / 5 = 200.
Чисел, делящихся на 7: 1000 / 7 = 142.
Чисел, делящихся на 11: 1000 / 11 = 90.

Чисел, делящихся на 3 и 5: 1000 / 15 = 66.
Чисел, делящихся на 3 и 7: 1000 / 21 = 47.
Чисел, делящихся на 3 и 11: 1000 / 33 = 30.
Чисел, делящихся на 5 и 7: 1000 / 35 = 28.
Чисел, делящихся на 5 и 11: 1000 / 55 = 18.
Чисел, делящихся на 7 и 11: 1000 / 77 = 12.

Чисел, делящихся на 3, 5 и 7: 1000 / 105 = 9.
Чисел, делящихся на 3, 5 и 11: 1000 / 165 = 6.
Чисел, делящихся на 3, 7 и 11: 1000 / 231 = 4.
Чисел, делящихся на 5, 7 и 11: 1000 / 385 = 2.

Чисел, делящихся на 3, 5, 7 и 11: 1000 / 1155 = 0.

Суммируем все найденные числа и получаем: 333 + 200 + 142 + 90 - 66 - 47 - 30 - 28 - 18 - 12 + 9 + 6 + 4 + 2 - 0 = 635.

2. Найдем количество всех натуральных чисел, не превышающих 1000.

Всего чисел до 1000: 1000.

3. Вычтем из общего количества чисел количество чисел, делящихся на 3, 5, 7, и 11. Получим количество чисел, которые не делятся ни на 3, ни на 5, ни на 7, ни на 11.

1000 - 635 = 365.

Таким образом, количество натуральных чисел, не превосходящих 1000, которые не делятся ни на 3, ни на 5, ни на 7, ни на 11, равно 365.
Любопытный исследовательМастер (1188) 1 неделю назад
Всё хорошо, только 333 + 200 + 142 + 90 - 66 - 47 - 30 - 28 - 18 - 12 + 9 + 6 + 4 + 2 - 0 = 585. И 1000 - 585 = 415.
Сергей Гений (56629) Любопытный исследователь, Осталось только выяснить как получилось именно 635)
Любопытный исследователь Мастер (1188) 1 неделю назад
 #include  
using namespace std;
int main() {
unsigned short count=0;
for (unsigned short i=1; i < 1001; ++i) {
if ((i % 3 != 0) && (i % 5 != 0) && (i % 7 != 0) && (i % 11 != 0)) ++count;
}
cout< return 0;
}
Ещё можно, как @Jurijus Zaksas, только вместо сравнения с нулём применить логическое отрицание:
 #include  
int main() {
unsigned short n=1000;
for (unsigned short i=1; i < 1001; ++i)
n -= !(i % 3) | !(i % 5) | !(i % 7) | !(i % 11);
std::cout << n;
return 0;
}
В любом случае, ответ: 415.
Jurijus Zaksas Искусственный Интеллект (426189) 1 неделю назад
Вообще-то чятик в первом ответе по сути прав - здесь надо включать логику, а не тупой перебор. Только в расчетах малец налажал, как всегда.
Если же делать перебором, я предлагаю так:
 int n = 1000; 
for (int i = 1; i <= 1000; i++)
n -= i % 3 == 0 | i % 5 == 0 | i % 7 == 0 | i % 11 == 0;
std::cout << n;
Сергей Гений (56629) 1 неделю назад
довел вариант чата до ума:
 #include  

int main()
{
int num3 = 1000 / 3; //число %3
int num5 = 1000 / 5; //число %5
int num7 = 1000 / 7; //число %7
int num11 = 1000 / 11; //число %11
int cnt = num3 + num5 + num7 + num11; //сумма всех чисел
int num35 = (num3 + num5) / (3 + 5); //пересечения 3 с 5
int num37 = (num3 + num7) / (3 + 7); //пересечения 3 с 7
int num311 = (num3 + num11) / (3 + 11); //пересечения 3 с 11
int num57 = (num5 + num7) / (5 + 7); //пересечения 5 с 7
int num511 = (num5 + num11) / (5 + 11); //пересечения 5 с 11
int num711 = (num7 + num11) / (7 + 11); //пересечения 7 с 11
cnt -= num35 + num37 + num311 + num57 + num511 + num711; //отнимаем от суммы пересечения
int num357 = (num35 + num37 + num57) / (3 + 5 + 7); //пересечения 3 с 5 с 7
int num3511 = (num35 + num311 + num511) / (3 + 5 + 11); //пересечения 3 с 5 с 11
int num3711 = (num37 + num311 + num711) / (3 + 7 + 11); //пересечения 3 с 7 с 11
int num5711 = (num57 + num511 + num711) / (5 + 7 + 11); //пересечения 5 с 7 с 11
cnt += num357 + num3511 + num3711 + num5711; //отнимаем из уже отнятых парных пересечний тройные (т.е. плюс)
int num35711 = (num357 + num3511 + num3711 + num5711) / (3 + 5 + 7 + 11); //пересечения всех делителей
cnt -= num35711; //отнимаем от уже отнятых парных от уже отнятых тройных) (т.е. минус)
std::cout << 1000 - cnt; //вычитаем из 1000 найденное количество
}
Похожие вопросы