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

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

04.02.2021, 13:37. Показов 33342. Ответов 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
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
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
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
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
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru