С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/163: Рейтинг темы: голосов - 163, средняя оценка - 4.96
 Аватар для Сиба
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 20

Найти число, у которого ровно три чётных делителя

04.02.2021, 13:37. Показов 33113. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Найдите все натуральные числа, принадлежащие отрезку
[101 000 000; 102 000 000], у которых ровно три различных чётных делителя.
В ответе перечислите найденные числа в порядке возрастания,
написан код на с++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int numberOfDividers(int a)
{
    int count = 0;
    int i = 2;
    while (i <= a)
    {
        if (!(a % i))
            count++;
        i += 2;
    }
    return count;
}
 
int main()
{
    std::vector<int> a;
    for (int i = 1; i <= 50; ++i)
        if (numberOfDividers(i) == 3)
            a.push_back(i);
    for (const auto& i : a)
        std::cout << i << " ";
}
и на паскале
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function numberOfDividers(a:integer): integer;
var count:integer;
begin
count := 0;
for i : integer := 1 to a do
if (((a mod i) = 0) and ((i mod 2) = 0)) then
count := count + 1;
numberOfDividers := count;
end;
 
begin
for i: integer := 101000000 to 102000000 do
if (numberOfDividers(i) = 3) then
write(i, ' ');
end.
И там и там, код очень долго запускается и никаких чисел не выводится, как переписать код(желательно на паскале), чтобы он работал быстрее?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2021, 13:37
Ответы с готовыми решениями:

Дан файл целых чисел. Записать в другой файл те элементы исходного файла, у которых ровно три четных делителя
Помогите найти ошибку, пожалуйста. Если ввести числа 2,4 и 8, выводит 4. А если ввести 8 и 18, то вообще ничего не выводит, хотя эти числа...

Найти число с минимальной суммой делителей, имеющее ровно четыре делителя
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку число с минимальной суммой делителей, имеющее ровно...

У скольких чисел от 1 до 2016 включительно ровно четыре натуральных делителя? (Включая 1 и само число)
У скольких чисел от 1 до 2016 включительно ровно четыре натуральных делителя? (Включая 1 и само число). Помогите пожалуйста !

16
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.02.2021, 13:48
Само число является делителем?
ТОГда все такие числа, кажется, имеют вид 2p2, где p - простое число.
Если не является, то, кажется, таких чисел вообще нет.
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.02.2021, 14:18
Цитата Сообщение от повар1 Посмотреть сообщение
признак делимости на 8 (делители 2, 4, 8)
При чем здесь это?
8:2 4 8
50:2 10 50
98: 2 14 98
и так далее.....
0
 Аватар для Сиба
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 20
04.02.2021, 14:24  [ТС]
да, делимость на 8 тут не при чем, к сожалению, это не проверять псевдокод, не получится, потому что на учёбе сказали решить эту задачу(

Добавлено через 55 секунд
и да, само число может являться делителем
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
04.02.2021, 15:10
Пост удален из-за условия "ровно". Делители точно четные? Так как в делитель любого числа входит единица, а она нечетная.

Добавлено через 1 минуту
Три делителя имеют квадраты простых чисел.
0
Заблокирован
04.02.2021, 15:28
Лучший ответ Сообщение было отмечено Сиба как решение

Решение

по теории Байт,
Цитата Сообщение от Байт Посмотреть сообщение
ТОГда все такие числа, кажется, имеют вид 2p2, где p - простое число.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cmath>
 
bool isPrime(int num)
{
  if(num < 2) { return false; }
  if(num == 2) { return true; }
  if(num % 2 == 0) { return false; }
  for(int i = 3; i <= sqrt(num); i += 2)
  {
    if(num % i == 0) { return false; }
  }
  return true;
}
 
int main()
{
     const int from = 101000000;
     const int to   = 102000000;
    // short test
     // const int from = 8;
     // const int to   = 100;
     int sqr_v;
    for(int i = from; i<=to; i+=2)
    {
          sqr_v = sqrt(i/2);
          if ( sqr_v*sqr_v == i/2 )
              if ( isPrime(sqr_v) )
                  std::cout<<i<<std::endl;
    }
   return 0;
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.02.2021, 15:42
SmallEvil, Имхо, лучше генерировать удвоенные квадраты
0
Заблокирован
04.02.2021, 16:54
Цитата Сообщение от Байт Посмотреть сообщение
SmallEvil, Имхо, лучше генерировать удвоенные квадраты
лучше )
0
 Аватар для Сиба
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 20
04.02.2021, 19:54  [ТС]
спасибо
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.02.2021, 16:55
Цитата Сообщение от Байт Посмотреть сообщение
Если не является, то, кажется, таких чисел вообще нет.
Тут я был не прав.Такие числа (с ровно тремя собственными четными делителями, конечно, есть. Например 16 30. Просто вид у них будет немножко другой.
2p3 или 2pq
0
 Аватар для Сиба
0 / 0 / 0
Регистрация: 20.09.2020
Сообщений: 20
05.02.2021, 20:05  [ТС]
странно, с 2р2 числа вывелись правильные и всё совпало с ответом, там выводились именно числа с тремя чётными делителями
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.02.2021, 21:20
Цитата Сообщение от Сиба Посмотреть сообщение
странно
НИЧЕГО СТРАННОГО, я просто рассмотрел 2 разные постановки задачи - с учетом самого числа или без оного. Все коды этого топика рассматривают задачу - с учетом самого числа. Что и правильно
Цитата Сообщение от Сиба Посмотреть сообщение
и да, само число может являться делителем
А мое соображение в посте 2 оказалось ошибочным. О чем я и известил почтенную публику
ЗЫ. А код уважаемого SmallEvil в посте 6 можно здорово улучшить в смысле эффективности. Но это уже дело вкуса и заинтересованности в улучшениях.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.02.2021, 21:43
Цитата Сообщение от Байт Посмотреть сообщение
При чем здесь это?
8:2 4 8
разве 2 4 8 это не чётные делители числа 8 ?
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
05.02.2021, 22:56
Yetty, условия задачи для телепатов. Т.е. среди всех делителей числа (четных и нечетных) только три должны быть четными, а остальные нечетные.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
05.02.2021, 23:24
Цитата Сообщение от повар1 Посмотреть сообщение
Т.е. среди всех делителей числа (четных и нечетных) только три должны быть четными, а остальные нечетные.
именно так. естественно n - это число чётное, его чётными делителями является число 2, само число n и ещё одно чётное число
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
06.02.2021, 10:43
Цитата Сообщение от Yetty Посмотреть сообщение
разве 2 4 8 это не чётные делители числа 8 ?
Еще раз повторю. Есть 2 задами.
1. В число делителей входит само число. Такие числа имеют вид 2p2. 8 = 2*4 - одно из них
2. Само число в делители не входит (рассматриваются только собственные делители) Такие числа имеют вид 2p3 или 2pq
Какие еще вопросы?
0
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 5
24.02.2021, 14:39
Сиба, Если нужно решение на Python:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def kolvo_del(x):
    d = 2
    kd = 1
    while d * d < x:
        if x % d == 0:
            if d % 2 == 0:
                kd += 1
            if x // d % 2 == 0:
                kd += 1
            if kd > 3:
                return kd
        d += 1
    if d * d == x:
        kd += 1
    return kd
 
for i in range (101000000, 102000000 + 1, 2):
    if kolvo_del(i) == 3:
        print(i)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2021, 14:39
Помогаю со студенческими работами здесь

Найти числа имеющие ровно два различных натуральных делителя
Здравствуйте! Готовлюсь к КЕГЭ 2021 и пишу в основном на с++.Т.к все разборы задач на паскале или питоне, то решила обратиться к вам т.к не...

Найти число, сумма четных цифр которого наибольшая
Ввести с клавиатуры n чисел. Найти среди них число, сумма четных цифр которого наибольшая. (Используйте функцию подсчета суммы четных цифр...

Найти число, сумма делителей которого в три раза больше самого числа
Найти число, сумма делителей которого в три раза больше самого числа (Само число к делителям не относится) Программа нашла наименьшее...

Дано натуральное число n (n < 9999). Выяснить, верно ли, что это число содержит ровно три одинаковые цифры
Дано натуральное число n (n &lt; 9999). Выяснить, верно ли, что это число содержит ровно три одинаковые цифры, если оно записано четырьмя...

Дано натуральное число n (n < 9999). Выяснить, верно ли, что это число содержит ровно три одинаковые цифры
Дано натуральное число n (n &lt; 9999). Выяснить, верно ли, что это число содержит ровно три одинаковые цифры с учетом четырех цифр, как,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru