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

Найти на промежутке от 1 до N все числа, взаимно простые с N

03.06.2010, 11:47. Показов 2433. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, помогите пожалуйста с простыми числами.

задача: дайтся число от 1(n). найти в промежутке между 1 и n все простые числа с n.
То есть надо найти те числа, у которых с n самый большой делитель =1.
3 дня не могу добится результата, завтра сдавать, спасите!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.06.2010, 11:47
Ответы с готовыми решениями:

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

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

Для заданного натурального числа найти все числа меньше его и взаимно простые с ним
Помогите написать код: для заданного с клавиатуры натурального числа N найти все числа меньше его и взаимно простые (не имеют общих...

17
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:00
Так?
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
#include <iostream>
bool func (int, int);
 
int main()
{
    int val;
    std::cout << "Input number: ";
    std::cin >> val;
 
    std::cout << "Found: ";
    for (int i=1; i<=val; i++)
        if (func (val, i)) std::cout << i << " ";
 
    std::cout << std::endl;
    system ("pause");
    return 0;
}
 
bool func (int val, int i)
{
    for (int j=2; j<val; j++)
        if (!(val%j) && !(i%j)) return false;
    return true;
}
2
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 12:21  [ТС]
да не особо так... надо ВЫВЕСТИ те числа у которых с данным числом максимальный ОБЩИЙ делитель равен 1.

то что у Вас написано, выдаёт результат
"21"
что ни к селу ни к городу.

к примеру если задано число "20", то на экран выводятся числа:
3 7 9 11 13 17 19
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:24
к примеру если задано число "20", то на экран выводятся числа:
3 7 9 11 13 17 19
А какие еще общие делители есть?
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 12:26  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
#include <conio.h>
int i,n;
main(){
    cout<<"n="; cin>>n;
    for (i=1;i<=n;i++)
        if(n%i!=0)
            if((i%2!=0)&&(n%2!=0))
            if((i%3!=0)&&(n%3!=0))
            if((i%5!=0)&&(n%5!=0))
                        if((i%7!=0)&&(n%7!=0))
                cout<<i<<" ";
getch();
}


думаю суть понятна... но проблема в том что когда в if ставлю "&&" то оно мне вообще ничего не выводит... хотя насколько я знаю, должно вывести те числа которые соответсвуют критериям отбора

Добавлено через 39 секунд
Цитата Сообщение от neske Посмотреть сообщение
А какие еще общие делители есть?
не понял вопроса?... общий делительно только один, и он равен 1 !
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:28
Вы вводите число 20.
Нужно найти все числа на промежутке 1..20, у которых с числом 20 будет максимальный общий делитель единица.

к примеру если задано число "20", то на экран выводятся числа:
3 7 9 11 13 17 19
Вы говорите неверно.
Я вас и спрашиваю, в таком случае назовите мне еще общие делители для пар (3,20), (7,20) и т.п., не считая единицу?
Жду.
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 12:43  [ТС]
общих больше нету вроде(упор делаю на свои математические знания).
3 и 20, 7 и 20. кроме 1 больше ничего нету.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:44
А что вы мне тогда говорите?
Программа работает правильно.

3 7 9 11 13 17 19, с каждым из них с числом 20 будет один общий делитель, единица.
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 12:46  [ТС]
Ваша программа выдала мне результат: 21.

при чём тут вообще 21? что оно означает? я этого не могу понять.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:49
KpoccoB0K, Какое число вы ввели?

Что все не так?
Миниатюры
Найти на промежутке от 1 до N все числа, взаимно простые с N  
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:53
Тут еще кнопка есть, сказать спасибо.
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 12:54  [ТС]
может проблема в том что я немного изменил ваш код из-за того что у нас скорее всего компиляторы не соответсвуют... может из-за этого и результат другой.


тогда будет небольшая просьба.. я сейчас в колледже сижу, поэтому компилятор стандартный(Turbo C++).

если Вам не сложно, то оптимизируйте её под стандартный компилятор, потому что я много чего не понял из того кода....
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 12:58
Код.
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 <iostream>
bool func (int, int); // прототип к функции.
 
int main()
{
    int val;
    std::cout << "Input number: ";
    std::cin >> val; // вводим число.
 
    std::cout << "Found: ";
    for (int i=1; i<=val; i++)
        if (func (val, i)) std::cout << i << " "; // если функция возвратила значениу true - выводим i на экран.
 
    std::cout << std::endl;
    system ("pause");
    return 0;
}
 
bool func (int val, int i)
{
    for (int j=2; j<val; j++)
        if (!(val%j) && !(i%j)) return false;
    // аналогично: if ((val%j==0) && (i%j==0)) return false;
    // то есть, если мы нашли общий делитель, отличный от единицы, то возвращаем false.
    // если мы прошли циклом до конца, но такого не нашли, возвращаем true.
    return true;
}

Посмотрите, я думаю понятней будет.
в Turbo C++ по идее должно работать, но всякое бывает.
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 13:06  [ТС]
в Turbo C++ выдаёт ошибку на bool func (int val, int i)
а после if (!(val%j) && !(i%j)) вообще ничего не выдаёт.

Добавлено через 43 секунды
то есть у меня почему-то двойное условие для if не работает((( *бъется об стенку*

Добавлено через 1 минуту
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.h>
#include <conio.h>
int val,i;
int func(int, int)
{
    for (int j=2; j<val; j++)
    if ((val%j!=0)&&(i%j!=0))
    return 0;
    else
    return 1;
}
 
 
int main()
{
clrscr();
    cout << "Input number: ";
    cin >> val;
 
    cout << "Found: ";
    for (int i=1; i<=val; i++)
    if (func (val, i)) cout << i << " ";
 
    cout << endl;
getch();
}
после этого кода от мне тупо выдает числа от 1 до 20.
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 13:08
СТрочка #7 неверно, так должно быть:
C++
1
if ((val%j==0)&&(i%j==0))
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 13:14  [ТС]
уже полностью молчит. считывает число и всё.

Добавлено через 1 минуту
о всё!)))

Добавлено через 3 минуты
но одна проблема, проверьте тоже... при вводе числа заканчивающиеся на 5, выдаются числа от 1 до *5.
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
03.06.2010, 13:29
KpoccoB0K, спасибо.
Нашел я ошибку.
Исправленный вариант:
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 <iostream>
bool func (int, int); // прототип к функции.
 
int main()
{
    int val;
    std::cout << "Input number: ";
    std::cin >> val; // вводим число.
 
    std::cout << "Found: ";
    for (int i=2; i<=val; i++)
        if (func (val, i)) std::cout << i << " "; // если функция возвратила значениу true - выводим i на экран.
 
    std::cout << std::endl;
    system ("pause");
    return 0;
}
 
bool func (int val, int i)
{
    for (int j=2; j<=i; j++)
        if (!(val%j) && !(i%j)) return false;
    // аналогично: if ((val%j==0) && (i%j==0)) return false;
    // то есть, если мы нашли общий делитель, отличный от единицы, то возвращаем false.
    // если мы прошли циклом до конца, но такого не нашли, возвращаем true.
    return true;
}
Миниатюры
Найти на промежутке от 1 до N все числа, взаимно простые с N  
1
1 / 1 / 0
Регистрация: 08.02.2010
Сообщений: 22
03.06.2010, 14:20  [ТС]
Оптимизированный вариант под базовые компиляторы(может кому-то еще пригодится)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <conio.h>
int i,val,j;
int func(int, int)
{
    for (j=2; j<=i; j++)
        if (!(val%j)&&!(i%j))
 return 0;
 return 1;
} 
int main()
{
    cout<<"Input number: ";
    cin>>val;
    cout<<"Found: ";
    for (i=2; i<=val; i++)
        if (func (val, i)) cout<<i<<" "; 
   cout<<endl;
    getch();
}


neske, Огромнейшее Вам спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2010, 14:20
Помогаю со студенческими работами здесь

Найти все натуральные числа меньше n и взаимно простые с ним
Прошу помочь написать программу на с++. Само здание: Дано натуральное число n. Получить все натуральные числа меньше n и взаимно простые с...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru