Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
1

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

31.05.2018, 18:56. Просмотров 269. Ответов 14
Метки нет (Все метки)

Дано натуральное число n>13. Найти все пары простых чисел, разность между
которыми равна 4 Каждое из чисел найденной пары меньше n. Мой код работает не совсем правильно, например, выводит то, что делится на 5. Как исправить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main() {
    int n, i;
    cout << "Enter n";
    cin >> n;
    while (n <= 13)
    {
        cout << "Error";
        cin >> n;
    }
    for (i = 2; i<n - 4; i++)
        if ((i % 2 != 0 && i % 3 != 0) || i == 2 || i == 3)
            if ((i + 4) % 2 != 0 && (i + 4) % 3 != 0)
                cout << i << "  " << i+4 << endl;
    _getch();
    return 0;
}
Добавлено через 6 минут
Только что понял, что тут много чего не учтено. Нужно реализовывать иначе. Если кто-то напишет код буду благодарен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2018, 18:56
Ответы с готовыми решениями:

Выдать пары простых чисел, разность между которыми равна 4, а сами числа меньше n
Дано натуральное число n&gt;13. Выдать пары простых чисел, разность между которыми...

Между n и 2n найти все пары простых чисел, разница которых равна 2
Нужна написать программу на с++ для решение задачи. Между n и 2n найти все пары...

Найти в массиве пары чисел, разность между которыми минимальна
Дан двум. массив целых чисел(10х10). Найти в этом массиве пары чисел, разница...

Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа, разность между которыми равна двум.
Помогите, пожалуйста, решить задачу: дано натуральное число n. Выяснить, ...

Найти числа-близнецы: простые числа разность между которыми равна 2
Дано натуральное число n. Среди чисел n, n + 1, …, 2n найти все...

14
nmcf
6399 / 5661 / 2580
Регистрация: 14.04.2014
Сообщений: 23,960
01.06.2018, 09:22 2
Сначала найди простые числа, а после проверяй.
https://ru.wikibooks.org/wiki/%D0%A0...B5%D0%BD%D0%B0
0
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
01.06.2018, 09:37  [ТС] 3
Можете, пожалуйста, убрать здесь лишнее (если есть таковое) и написать проверку на то, чтобы разница между числами была -4?

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 <iostream>
#include<cmath>
#include <conio.h>
 
using namespace std;
 
int main()
{
    int n;
    cout << "Enter natural n - the upper limit of the range [1..n]";
    cin >> n;
    bool prime[1000];
    for (int i = 0; i <= n; i++)//заполняем массив Prime единицами
        prime[i] = true;//изначально считаем все чила простыми
    prime[0] = prime[1] = 0;//0 И 1 не являются простыми
    for (int i = 2; i <= n; ++i)//перебираем все чила от 2 до n
        if (prime[i] == 1)//если мы встретили простое число, вычеркиваем каждое iое начиная с i^2
            if (i * 1ll * i <= n) //1ll - константа единица типа long long i^2 * 1 = i^2
                for (int j = i*i; j <= n; j += i)//Начинаем с i^2
                    prime[j] = false;//непосредственно вычеркивание
 
    for (int i = 2; i <= n; i++)//выводим ответ
        if (prime[i] == 1) {
            cout << i << endl;
        }
    _getch();
    return 0;
}
0
nmcf
6399 / 5661 / 2580
Регистрация: 14.04.2014
Сообщений: 23,960
01.06.2018, 10:12 4
Во-первых, неправильно. Где vector? Если меняешь, надо делать это грамотно. Оставь как там было.
А после нахождения чисел, надо искать пары.
0
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
01.06.2018, 10:16  [ТС] 5
Мне нужно без использования вектор реализовать, и вообще, вроде верно. А все проверки у меня заканчиваются проблемами, выводит что-то непонятное. Мне бы просто чтобы вы код дописали
0
nmcf
6399 / 5661 / 2580
Регистрация: 14.04.2014
Сообщений: 23,960
01.06.2018, 10:19 6
Сначала запиши найденные числа в массив, сами значения. И по нему уже ищи.
0
Байт
Эксперт C
18943 / 12159 / 2538
Регистрация: 24.12.2010
Сообщений: 24,748
01.06.2018, 11:46 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool isPrim(int k)
{   int i;
   for(i=3; i*i <= k; i+=2)
     if (k%i==0) return false;
   return true;
}
int main()
{  int n;
  cin >> n;
  for(int k=3; k+4 <= n; k+=2)
     if (isPrim(k) && isPrim(k+4))
       cout << k << " " << k+4 << endl;
}
У кода есть недостаток. Некоторые числа проверябтся на простоту дважды. Этот недостаток при желании можно устранить. Зато не нужно ни массивов, ни векторов.
0
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
03.06.2018, 10:46  [ТС] 8
Подскажите, как мне правильно вставить ваш код в свой? Мой есть выше. И если есть возможность, то устраните, пожалуйста, недостаток этот) Заранее огромное спасибо

Добавлено через 3 минуты
И если все-таки сможете, мне бы лучше с массивом это сделать...
0
ValeryS
Модератор
7315 / 5558 / 704
Регистрация: 14.02.2011
Сообщений: 18,845
03.06.2018, 11:03 9
Цитата Сообщение от Байт Посмотреть сообщение
bool isPrim(int k)
чей то ты слишком упростил
например числа 0 и 1 простые
а так же и 4 и 6 и 8
Цитата Сообщение от Байт Посмотреть сообщение
for(i=3; i*i <= k; i+=2)
3*3<= 4 ЛОЖЬ
3*3<= 6 ЛОЖЬ
3*3<= 8 ЛОЖЬ
в цикл не входим, возвращается true
0
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
03.06.2018, 13:54  [ТС] 10
Вы бы могли помочь мне занести результаты в массив, а там уже вывести только те, разница между которыми 4?

Добавлено через 2 часа 48 минут
ValeryS, пожалуйста, помогите
0
Байт
Эксперт C
18943 / 12159 / 2538
Регистрация: 24.12.2010
Сообщений: 24,748
03.06.2018, 16:42 11
Цитата Сообщение от ValeryS Посмотреть сообщение
чей то ты слишком упростил
Виноватая я!
0, 1 - мне плевать. Проверка начинается с k=3
Но вот то, что четные не отбраковываю, да, моя вина. Хотя не столь уж большая. Внешний цикл идет только по нечетным. Так что код работать будет!
0
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
03.06.2018, 16:46  [ТС] 12
Прошу вас, помогите мне написать кусочек кода. Я не могу вывести нужные мне простые числа. У вас это займет не более 3 минут.
0
Байт
Эксперт C
18943 / 12159 / 2538
Регистрация: 24.12.2010
Сообщений: 24,748
03.06.2018, 16:55 13
Код я составил. Но в наказание за нарушение правила 4.6 - удалил. Чтоб неповадно было в личку всякую ерунду писать!
1
kava13
0 / 0 / 0
Регистрация: 12.10.2016
Сообщений: 62
03.06.2018, 17:12  [ТС] 14
Огромное вам спасибо!

Добавлено через 16 минут
Извините, я не знал об этом правиле, а помощь так никто и не собирался оказывать. Еще раз спасибо
0
ValeryS
03.06.2018, 17:19     Найти все пары простых чисел, разность между которыми равна 4
  #15

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
0, 1 - мне плевать. Проверка начинается с k=3
навеяло
"Оставим его в тылу. Не люблю я ничего оставлять в тылу, неприятно это, как дырявый зуб..."
(с) Стругацкие "За миллиард лет до конца света"

0
03.06.2018, 17:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2018, 17:19
Привет! Вот еще темы с ответами:

Найти все пары параллельных прямых,расстояние между которыми принадлежит заданному интервалу
Задача состоит в том,что нужно найти все пары параллельных прямых,расстояние...

Найти номера пары точек, расстояние между которыми максимально (Паскаль -> С++)
переведите пожалуйста или решите на си++ вот задача: Даны координаты n точек...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru