Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 11
1

Взаимно простые делители

13.10.2009, 03:47. Показов 4191. Ответов 9
Метки нет (Все метки)

Даны целые числа p и q. Получить все делители числа q, взаимно простые с p, т.е. не имеющие с p общих делителей.
Помогите пожалуйста решить.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2009, 03:47
Ответы с готовыми решениями:

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

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

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

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

9
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
13.10.2009, 06:44 2
честно признаюсь долго не думал, поэтому стоит потестить. всё может оказатьс гораздо сложнее
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
#include "iostream"
 
using namespace std;
 
// Даны целые числа p и q. Получить все делители числа q, взаимно простые с p, т.е. не имеющие
// с p общих делителей.Помогите пожалуйста решить.
 
int main()
{
    int p , q;
    cout << "Enter p: ";    cin >> p;
    cout << "Enter q: ";    cin >> q;
    
    cout << "result: ";
    // все делители q
    for (int i=2;i<q;i++)
    {
        if(!(q%i))  // делиться без остатка
            if(p%i&&i%p)
                cout<<" "<<i;
    }
 
    cout << endl;
    system("PAUSE");
    return 0;
}
0
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 11
14.10.2009, 02:12  [ТС] 3
А как это записать в c++ ?
0
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
14.10.2009, 03:08 4
Цитата Сообщение от Ch3r3p0sha Посмотреть сообщение
А как это записать в c++ ?
Что,можно уже тему в юмор перетаскивать? Второй пост - код на си++.

Правда,там проверка на взаимною простоту неправильная...
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
14.10.2009, 05:38 5
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Правда,там проверка на взаимною простоту неправильная...
попытка номер 2.
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
#include "iostream"
 
using namespace std;
 
// Даны целые числа p и q. Получить все делители числа q, взаимно простые с p, т.е. не имеющие
// с p общих делителей.Помогите пожалуйста решить.
 
int main()
{
    int p , q;
    bool flag;
    cout << "Enter p: ";    cin >> p;
    cout << "Enter q: ";    cin >> q;
 
    cout << "result: ";
    // все делители q
    for (int i=2;i<q;i++)
    {
        if(!(q%i))      // делиться без остатка
        { i flag=true;
            for (int j=2; j<i; j++)
            {
                if (p%j&&i%j)
                    flag=false;
            }
            if (flag)
                    cout<<" ! "<<i<<endl;
        }
    }
 
    cout << endl;
    system("PAUSE");
    return 0;
}
XuTPbIu_MuHTAu, правильный варинт можно посмотреть, а лучше тестовую комбинацию скажите для проверки (с правильным ответом) ... и я своего допьюсь
0
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
14.10.2009, 05:50 6
Цитата Сообщение от TanT Посмотреть сообщение
XuTPbIu_MuHTAu, правильный варинт можно посмотреть, а лучше тестовую комбинацию скажите для проверки (с правильным ответом) ... и я своего допьюсь
Ну,допиваться так допиваться.Я собрал быстренько свою реализацию,ща накидаю тебе комбинаций ))

Код
15,35 - > 3
10, 5 - >    
12,60 -> 5
60,12 -> 
88,33 -> 3
15,12 -> 2,4
Добавлено через 1 минуту
И я бы все же вынес определение взаимной простоты в отдельную функцию
1
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
14.10.2009, 08:36 7
[QUOTE=XuTPbIu_MuHTAu;304905]
Код
15,35 - > 3
/QUOTE]
Даны целые числа p и q.
Получить все делители числа q, взаимно простые с p, т.е. не имеющие с p общих делителей.
q=15, p=35 (p на 3 не делиться)
делители 15: 3, 5
3 ? 35 - подходит
5 ? 35 - нет
это понятно мне

дальше
12,60 -> 5, а вот тут многозначительное эээээээ
но потом
60,12 -> наверно просто путаница

в итоге вот, дубль 3
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
#include "iostream"
#include "cmath"
 
using namespace std;
 
// Даны целые числа p и q. Получить все делители числа q, взаимно простые с p, т.е. не имеющие
// с p общих делителей.
 
bool MutualSimple(int a, int b)
{
    a=abs(a); b=abs(b);
    if (a==1||b==1)
        return true;
    
    if (a==b)
        return false;
 
    for (int j=2; j<((a>b)?a:b); j++)
    {
        if (( !(b%j) )&&( !(a%j) ))
            return false;
    }
 
    return true;
}
 
int main()
{
    int p , q;
    bool flag;
    cout << "\nEnter p: ";    cin >> p;
    cout << "Enter q: ";    cin >> q;
 
    cout << "result: ";
    // все делители q
    for (int i=2;i<q;i++)
    {
        if(!(q%i))      // делиться без остатка
            if(MutualSimple(q/i, p))
                cout<<" ! "<<q/i<<endl;
 
    }
 
    cout << endl;
    system("PAUSE");
    return 0;
}
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
04.12.2009, 05:39 8
C, пред употреблением проверить
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
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
#define FALSE 0
#define TRUE  1
// Даны целые числа p и q. Получить все делители числа q, взаимно простые с p, т.е. не имеющие
// с p общих делителей.
 
int MutualSimple(int a, int b)
{
    a=abs(a); b=abs(b);
    if (a==1||b==1)
        return TRUE;
 
    if (a==b)
        return FALSE;
 
    for (int j=2; j<((a>b)?a:b); j++)
    {
        if (( !(b%j) )&&( !(a%j) ))
            return FALSE;
    }
 
    return TRUE;
}
 
int main()
{
    int p , q;
    int flag;
    printf("Enter p: ");   scanf("%i",&p);
    printf("Enter q: ");    scanf("%i",&q);
 
    printf("result: ");
    // все делители q
    for (int i=2;i<q;i++)
    {
        if(!(q%i))      // делиться без остатка
            if(MutualSimple(q/i, p))
                printf(" !  %i\n",q/i);
 
    }
 
    
    getch();
    return 0;
}
0
1 / 1 / 0
Регистрация: 07.03.2019
Сообщений: 9
26.03.2019, 00:00 9
Подскажите пожалуйста, у меня такая же задача.
TRUE и FALSE - не проходили.

условие: Найти все делители натурального числа Р взаимно-простые с Q. Вывести количество этих делителей и сами делители.

ввод: 10 2
Вывод: 1 5
2

ввод: 20 3
Вывод: 1 2 4 5 10 20
6

мое решение

Ошибка - нод считается бесконечно. не могу понять почему
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
#include <bits/stdc++.h>
using namespace std;
int main ()
{
    int p, q, k = 0, nod = 0, a = 0, x = 0;
    cin >> p >> q;
 
    x = q; // дубликат q
    for (int i = 1; i <= p; i ++)
{
    a = i; // дубликат i
    q = x; // возвращаем q к исходному значению
        while (i != 0 && q != 0)
    {
        if (i > q) i = i % q;
        else q = q % i;
    }
    nod = i + q; // НОД для i и q
 
       if (p % a == 0 && nod == 1) //если Р делится без остатка на i и НОД числа q и этого i = 1 - число подходит
       {
       cout << i << " " << "\n";
        k ++;
       }
}
       cout << k;
       return 0;
}
0
1 / 1 / 0
Регистрация: 07.03.2019
Сообщений: 9
26.03.2019, 22:30 10
может кто знает где ошибка?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2019, 22:30

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru