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

Найти количество делителей двух чисел

09.07.2021, 08:08. Показов 11498. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано натуральное число n. Подсчитайте количество таких пар чисел (a;b), что:

a и b — делители n;
a<b;
a и b — взаимно простые;
ab≤n.
Входные данные

Вводится натуральное число n≤108.

Выходные данные

Выведите количество таких пар.

Примеры
Ввод
10
Вывод
4
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2021, 08:08
Ответы с готовыми решениями:

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

Найти количество чисел имеющих четное количество делителей
найдите количество от 1 до n которые имеют четное количество делителей Добавлено через 31 секунду вход 10 выход 7

Найти количество чисел имеющих четное количество делителей
Дано целое число n. Найдите кол-во чисел от 1 до n, которые имеют четное кол-во делителей. Формат входных данных: В первой строке...

30
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 09:04
Цитата Сообщение от dmitrii2000 Посмотреть сообщение
Примеры
Ввод
10
Вывод
4
10 = 1 * 10 = 2 * 5
А остальные 2 пары?
-------
А, поняль:
Code
1
2
3
4
5
6
# 101 * 2
# 101 * 5
# 101 * 10
# 102 * 5
 
$ Всего пар: 4
Добавлено через 22 минуты
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
#include <cstdio>
 
unsigned gcd(unsigned a, unsigned b)
{
  if (!a || !b) return a + b;
  while (a != b) if (a > b) a -= b; else b -= a;
  return a; 
}
 
unsigned pairs_count(unsigned n)
{
  unsigned total = 0;
  for (unsigned a = 1; a * a <= n; a++)
    for (unsigned b = a + 1; a * b <= n; b++)
      if (!(n % a) && !(n % b) && gcd(a, b) == 1) 
        total++, printf("# %u ≥ %u * %u\n", n, a, b);
  return total;  
}
 
int main()
{
  unsigned n = 0;
  do printf("\n? n = ");
  while (scanf("%u", &n) != 1 || !n);
  printf("$ Всего пар: %u\n", pairs_count(n));
  return 0;
}
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
09.07.2021, 09:23  [ТС]
Программа не проходит по времени.
0
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 09:27
Цитата Сообщение от dmitrii2000 Посмотреть сообщение
Программа не проходит по времени.
В условии задачи про время ничего не сказано.
И как и кем это время замеряется и с какого момента?
0
 Аватар для Super-Hacker
342 / 114 / 37
Регистрация: 26.11.2019
Сообщений: 735
09.07.2021, 10:24
https://en.cppreference.com/w/cpp/numeric/gcd
Потому что mod использовать надо))

C++
1
2
3
4
5
6
unsigned gcd(unsigned a, unsigned b)
{
  if (!a || !b) return a + b;
  while ((a + b) != 0) if (a > b) a %= b; else b %= a;
  return a; 
}
Добавлено через 8 минут
Ладно. Постыдно получилось
C++
1
2
3
4
5
6
7
8
unsigned gcd (unsigned a, unsigned b) 
{
    while (b != 0) {
        a %= b;
        std::swap(a, b);
    }
    return a;
}
Добавлено через 21 секунду
Но кто знает, в чём на самом деле дело
0
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 10:28
Цитата Сообщение от Super-Hacker Посмотреть сообщение
Потому что mod использовать надо))
нетЪ.
Цитата Сообщение от Super-Hacker Посмотреть сообщение
Но кто знает, в чём на самом деле дело
чел копипастит исходник, не глядя, на сцайт, где бот его компилит, запускает и пытается взаимодействовать. Думаю, ручной ввод данных там не предусмотрен и происходит через файл.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.07.2021, 10:38
Небольшая модификация
C++
1
2
3
4
5
6
7
8
9
10
11
unsigned pairs_count(unsigned n)
{
  unsigned total = 0;
  for (unsigned a = 1; a * a <= n; a++)
    if (n%a) continue;
    for (unsigned b = a + 1;  b <= n/a; b++)
      if (!(n % b) && gcd(a, b) == 1) 
        total++, printf("# %u ≥ %u * %u\n", n, a, b);
  return total;  
 
}
0
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 10:46
Цитата Сообщение от Байт Посмотреть сообщение
Небольшая модификация
А смысол? По умолчанию логические выражения считаются не полностью, а до очевидного результата.
0
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 10:53
Провёл эксперимет со временем. Результаты:


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
33
34
35
36
37
38
39
#include <cstdio>
#include <cstdlib>
#include <ctime>
 
unsigned gcd(unsigned a, unsigned b)
{
  if (!a || !b) return a + b;
  while (a != b) if (a > b) a -= b; else b -= a;
  return a; 
}
 
unsigned pairs_count(unsigned n, clock_t &duration)
{
  unsigned total = 0;
  duration = clock();
  
  for (unsigned a = 1; a * a <= n; a++)
    for (unsigned b = a + 1; a * b <= n; b++)
      if (!(n % a) && !(n % b) && gcd(a, b) == 1) 
        total++;//, printf("# %u ≥ %u * %u\n", n, a, b);
        
  duration = clock() - duration;       
  return total;  
}
 
int main()
{
  system("chcp 65001 && cls");
  unsigned n = 0;
  
  
  do printf("\n? n = ");
  while (scanf("%u", &n) != 1 || !n);
  
  clock_t t;
  printf("$ Всего пар: %u\n", pairs_count(n, t));
  printf("$ Время: %lu мс\n", t);
  return 0;
}
Дальше ускорять смысол есть, как думаете?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.07.2021, 10:54
Цитата Сообщение от Verevkin Посмотреть сообщение
А смысол?
Меньше проходов внутреннего цикла. Неь заведомо не нужных
0
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 10:56
Цитата Сообщение от Байт Посмотреть сообщение
Меньше проходов внутреннего цикла. Неь заведомо не нужных
Ты операторные скобки забыль.
Но ты прав, скорость увеличилась, конечно.

1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
09.07.2021, 11:00
Цитата Сообщение от Verevkin Посмотреть сообщение
Ты операторные скобки забыль.
Звиняйте....
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned pairs_count(unsigned n)
{
  unsigned total = 0;
  for (unsigned a = 1; a * a <= n; a++) {
    if (n%a) continue;
    for (unsigned b = a + 1;  b <= n/a; b++)
      if (!(n % b) && gcd(a, b) == 1) 
        total++, printf("# %u ≥ %u * %u\n", n, a, b);
  }
  return total;  
 
}
0
Злостный нарушитель
 Аватар для Verevkin
10862 / 5806 / 1283
Регистрация: 12.03.2015
Сообщений: 26,819
09.07.2021, 11:01
Цитата Сообщение от Байт Посмотреть сообщение
Звиняйте....
Я вот так допилил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned pairs_count(unsigned n, clock_t &duration)
{
  unsigned total = 0;
  duration = clock();
  
  for (unsigned a = 1; a * a <= n; a++)
    if (!(n % a)) // модификация (© Байт)
      for (unsigned b = a + 1; a * b <= n; b++)
        if (/*!(n % a) &&*/ !(n % b) && gcd(a, b) == 1) 
          total++;//, printf("# %u ≥ %u * %u\n", n, a, b);
        
  duration = clock() - duration;       
  return total;  
}
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
10.07.2021, 08:37  [ТС]
Скиньте решение пожалуйста
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
19.07.2021, 06:08  [ТС]
Делители
Дано натуральное число n. Подсчитайте количество таких пар чисел (a;b), что:

a и b — делители n;
a<b;
a и b — взаимно простые;
ab≤n.
Входные данные

Вводится натуральное число n≤108.

Выходные данные

Выведите количество таких пар.

Примеры
Ввод
10
Вывод
4
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13202 / 6837 / 1822
Регистрация: 18.10.2014
Сообщений: 17,297
19.07.2021, 07:46
Цитата Сообщение от dmitrii2000 Посмотреть сообщение
Вводится натуральное число n≤108.
Всего 108? Посчитайте на бумажке и заполние таблицу из 108 готовых решений.
0
736 / 702 / 110
Регистрация: 29.05.2015
Сообщений: 4,293
19.07.2021, 08:26
Конечно там нужно 108

1. Найти все делители
2. Составить все возможные пары
3. Убрать все пары, которые a * b >= n
4. Убрать все пары, у которых НОД > 1
5. Оставшиеся пересчитать

Боюсь, что это будет не быстро.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
19.07.2021, 08:56
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int gcd(int a, int b)
{
    int tmp;
    while(b != 0)
    {
        tmp=a%b;
        a=b;
        b=tmp;
    }
    return a;
}
 
int main()
{
    vector<int> factors;
    int n,k,sz,a,b,c;
 
    cout << "n=";
    cin >> n;
    
    k=2;
    while (k*k<=n)
    {
        if (n%k==0)
        {
            factors.push_back(k);
            if (n/k != k) factors.push_back(n/k);
        }
        k++;
    }
    
    sort(begin(factors), std::end(factors));
 
    sz=factors.size();
    c=0;
    
    for (int i=0; i<sz-1; i++)
        for (int j=i+1; j<sz; j++)
        {
            a=factors[i];
            b=factors[j];
            if ((gcd(a,b)==1) && (a*b<n)) 
            {
                cout << a << " " << b << endl;
                c++;
            }
        }    
    
    cout << "c=" << c;
 
    return 0;
}
0
2 / 2 / 0
Регистрация: 03.05.2020
Сообщений: 202
19.07.2021, 09:38  [ТС]
Спасибо ! Но сайт пишет, что программа выдаёт неверный ответ
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38203 / 21135 / 4310
Регистрация: 12.02.2012
Сообщений: 34,741
Записей в блоге: 14
19.07.2021, 09:48
Цитата Сообщение от dmitrii2000 Посмотреть сообщение
Но сайт пишет, что программа выдаёт неверный ответ
- непонятно, какой ответ считать верным. Вот пример n=10. Делители 2 и 5. Пара единственная (2,5). Числа взаимно-простые, но их произведение =10, т.е. условию задачи не удовлетворяет. Между тем, ты приводишь пример, что ответ в случае n=10 должен быть 4. Откуда???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.07.2021, 09:48
Помогаю со студенческими работами здесь

Для каждого числа найти количество его делителей и определить общее количество простых чисел в последовательности
С клавиатуры вводится последовательность целых чисел, 0 - конец этой последовательности. Для каждого числа найти количество его делителей и...

Найти количество делителей каждого из целых чисел от a до b на с++
Найти количество делителей каждого из целых чисел от a до b на с++ (не ругайте только начал изучать ) заранее спасибо

Найти количество положительных делителей произведения 10 чисел
Десять математиков летели на воздушном шаре над Тихим океаном. Когда они пересекали экватор, они решили отметить это событие и открыли...

Найти количество делителей каждого из целых чисел от 120 до 140
Найти количество делителей каждого из целых чисел от 120 до 140.

Вводится последовательность из N целых чисел. Найти количество двух- и количество трех разрядных чисел в последовательн
Вводится последовательность из N целых чисел. Найти количество двух- и количество трех разрядных чисел в последовательности (функцией...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
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. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru