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

Получить все делители числа q, взаимно простые к p

19.10.2014, 21:21. Показов 3716. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p.

помогите пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.10.2014, 21:21
Ответы с готовыми решениями:

Получить все делители числа q, взаимно простые с р
3.Даны натуральные числа р и q. Получить все делители числа q, взаимно простые с р заранее спасибо

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p. помогите сделать на с++

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p.
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p.

5
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
20.10.2014, 02:48
По уму так: раскладываем числа p и q на простые сомножители. Вычеркиваем из разложения числа q все сомножители, которые присутствуют в разложении p. Теперь надо лишь сгенерировать произведения всех разнообразных подмножеств оставшихся сомножителей из разложения q. Каждое произведение - это ваш искомый делитель.

Например: p = 210, q = 12. p = 2 * 3 * 5 * 7. q = 2 * 2 * 3. В разложении p вычеркиваем 2 и 3, остается только 5 и 7. Искомые делители: 5, 7 и 35.

Ну а тупо в лоб: сделайте цикл i от 2 до sqrt(q). Каждое i проверяйте на предмет того, является ли оно делителем q. Если является, то вычислите наибольший общий делитель i и p (алгоритмом Евклида, например). Если НОД равен единице - то это ваш искомый делитель.

Добавлено через 8 минут
Вкралась опечатка: в примере значения p и q по ошибке поменялись ролями.
0
И целого heap'а мало
 Аватар для Andrej
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
20.10.2014, 03:32
romi41, факторизуем q. Получившиеся элементы разложения нодируем с p. Если выхлоп нода от элемента разложения и 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
// факторизация
#include <vector>
#include <cmath>
 
std::vector
factorize(int num)
{
    std::vector factors;
    if (!num) throw 1; // что-нибудь другое можно сюда впихнуть
    num = num > 0 ? num : -num;
    int boundary = std::pow(num 1.0 / 3.0); // ходят слухи, что проверять нужно лишь до третьего корня
    for (int i = 2; i < boundary; ++i) { // тупо в лоб перебираем
        if (num % i == 0) {
            factors.push_back(i);
        }
    }
    return factors;
}
 
unsigned
GCD(unsigned u, unsigned v) { // НОД
    while ( v != 0) {
        unsigned r = u % v;
        u = v;
        v = r;
    }
    return u;
}
 
// в main сравниваешь каждое число из вектора с p в GCD, если выхлопнет 1, значит оно
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12936 / 6803 / 1821
Регистрация: 18.10.2014
Сообщений: 17,214
20.10.2014, 05:07
Цитата Сообщение от Andrej Посмотреть сообщение
romi41, факторизуем q. Получившиеся элементы разложения нодируем с p. Если выхлоп нода от элемента разложения и p - единица, значит подходит.
Простите, это как? Элементы факторизации - это простые числа. Их с чем ни "нодируй", всегда получится именно единица.

Добавлено через 33 минуты
Вот, по доброте душевной (и не пользуясь всеми этими модными С++11 финтифлюшками)

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
59
60
61
62
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
std::vector<unsigned> factorize_unique(unsigned n)
{ // Факторизует n; возвращает только уникальные факторы
  std::vector<unsigned> factors;
 
  for (unsigned factor = 2; factor * factor <= n; )
    if (n % factor == 0)
    {
      if (factors.empty() || factors.back() != factor)
        factors.push_back(factor);
      n /= factor;
    }
    else
      ++factor;
 
  if (n > 1 && (factors.empty() || factors.back() != n))
    factors.push_back(n);
 
  return factors;
}
 
int main()
{
  unsigned q = 210;
  unsigned p = 12;
 
  std::vector<unsigned> q_factors = factorize_unique(q);
  std::vector<unsigned> p_factors = factorize_unique(p);
 
  std::vector<unsigned> q_only;
  std::set_difference(
    q_factors.begin(), q_factors.end(), 
    p_factors.begin(), p_factors.end(),
    std::back_inserter(q_only));
 
  if (q_only.empty())
  {
    std::cout << "Нет делителей" << std::endl;
    return 0;
  }
 
  for (unsigned pattern = 1, end_pattern = 1 << q_only.size();
       pattern != end_pattern;
       ++pattern)
  {
    unsigned divisor = 1;
 
    std::vector<unsigned>::iterator it;
    unsigned bit;
    for (it = q_only.begin(), bit = 1; it != q_only.end(); ++it, bit <<= 1)
      if ((pattern & bit) != 0)
        divisor *= *it;
 
    std::cout << divisor << " ";
  }
 
  std::cout << std::endl;
}
1
И целого heap'а мало
 Аватар для Andrej
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
20.10.2014, 08:38
TheCalligrapher, sh~! А ведь точно, лол! Ночь
0
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 35
20.10.2014, 20:11  [ТС]
можно код попроще сделать, с помощью простых операторов написать... на 1 курсе многие операторы еще не прошли)))

Добавлено через 28 секунд
Спасибо))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.10.2014, 20:11
Помогаю со студенческими работами здесь

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р.
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р
Получить все делители числа q, взаимно простые с р.

не могу понять задачку :) Даны натуральные числа p и q. Получить все делители числа q, взаимно простые с p
Даны натуральные числа p и q. Получить все делители числа q, взаимно простые с p.

Найти все делители числа n, взаимно простые с m
Даны целые числа m и n. Найти все делители числа n, взаимно простые с m.

Получить все простые делители числа
Здравствуйте, помогите, пожалуйста. Дано целое число n. Получить все простые делители этого числа.


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru