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

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

DL_time Ученик (218), закрыт 10 месяцев назад
Лучший ответ
Сергей Гений (60431) 12 месяцев назад
довел вариант чата до ума:
 #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 найденное количество
}
Остальные ответы
Dmitry Shakirov Ученик (206) 12 месяцев назад
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.
RAM OverflowМастер (1412) 12 месяцев назад
Всё хорошо, только 333 + 200 + 142 + 90 - 66 - 47 - 30 - 28 - 18 - 12 + 9 + 6 + 4 + 2 - 0 = 585. И 1000 - 585 = 415.
Сергей Гений (60431) Любопытный исследователь, Осталось только выяснить как получилось именно 635)
RAM Overflow Мастер (1412) 12 месяцев назад
 #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 Искусственный Интеллект (469563) 12 месяцев назад
Вообще-то чятик в первом ответе по сути прав - здесь надо включать логику, а не тупой перебор. Только в расчетах малец налажал, как всегда.
Если же делать перебором, я предлагаю так:
 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;
Похожие вопросы