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

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

10.11.2010, 17:52. Просмотров 4977. Ответов 11
Метки нет (Все метки)

Помогите, пожалуйста, решить задачу:
дано натуральное число n. Выяснить, имеются ли среди чисел n, n+1, ..., 2n близнецы, т.е. простые числа, разность между которыми равна двум. (Определить процедуру, позволяющую распознавать простые числа.)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2010, 17:52
Ответы с готовыми решениями:

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

Определить, есть ли среди чисел в заданном интервале близнецы (простые числа, разница между которыми = 2)
Дано натуральное число n. Определить, есть ли среди чисел n, n+1, ..., 2n числа - близнецы, то есть...

Дано натуральное число n, выяснить имеются ли среди чисел n, n+1,...,2n близнецы
1.Дано натуральное число n, выяснить имеются ли среди чисел n, n+1,...,2n близнецы (парные простые...

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

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

11
fasked
Эксперт С++
5009 / 2588 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.11.2010, 18:11 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
#include <math.h>
#include <stdio.h>
 
int isprime(int n) {
        int i;
        for(i = 2; i <= n/2; ++i) {
                if(n % i == 0)
                        return 0;
        }
 
        return 1;
}
 
int main()
{
        int i, j;
        int n = 10;
 
        for(i = n; i <= 2*n; ++i) {
                if(isprime(i)) {
                        for(j = i; j <= 2*n; ++j) {
                                if(isprime(j) && j-i == 2)
                                        printf("%d - %d == 2\n", i, j);
                        }
                }
        }
}
1
INFINITIFX
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 24
10.11.2010, 21:22  [ТС] 3
А как это будет выглядеть на С++?
0
МаксимМВ
C/C++
92 / 92 / 18
Регистрация: 01.07.2010
Сообщений: 281
10.11.2010, 21:37 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
#include <сmath>
#include <iostream>
 
int isprime(int n) {
        int i;
        for(i = 2; i <= n/2; ++i) {
                if(n % i == 0)
                        return 0;
        }
 
        return 1;
}
 
int main()
{
        int i, j;
        int n = 10;
 
        for(i = n; i <= 2*n; ++i) {
                if(isprime(i)) {
                        for(j = i; j <= 2*n; ++j) {
                                if(isprime(j) && j-i == 2)
                                        std::cout<<i<<"-"<<j<<"==2"<<std::endl;
                        }
                }
        }
}
1
10.11.2010, 21:37
INFINITIFX
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 24
10.11.2010, 22:21  [ТС] 5
А для чего return 1?

Добавлено через 5 минут
А как выглядит блок-схема для этой задачи?
0
fasked
Эксперт С++
5009 / 2588 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.11.2010, 22:51 6
Цитата Сообщение от INFINITIFX Посмотреть сообщение
А для чего return 1?
Для С++ логичнее сделать возвращаемое значение типа bool, вместо единицы - true, вместо 0 соответственно false.
А так код валиден и для С++. Утверждать, что она написан не на Си++ нельзя
1
МаксимМВ
11.11.2010, 08:12
  #7

Не по теме:

Я просто наспех заменил printf на cout и спать пошёл)))

0
INFINITIFX
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 24
18.11.2010, 05:08  [ТС] 8
Помогите, пожалуйста, составить блок-схему для этой задачи.
0
valeriikozlov
Эксперт С++
4697 / 2522 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
18.11.2010, 06:31 9
fasked,
МаксимМВ,
Зачем такие сложности:
for(i = n; i <= 2*n; ++i) {
if(isprime(i)) {
for(j = i; j <= 2*n; ++j) {// зачем здесь прогонять еще один цикл? Ведь предыдущее условие можно написатьтак if(isprime(i) && isprime(i+2)). И еще немного уменьшить границу для i<=2*n-2
if(isprime(j) && j-i == 2)
0
mikutu
27 / 27 / 10
Регистрация: 29.04.2009
Сообщений: 90
18.11.2010, 06:42 10
имхо вообще цикл по j лишний

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
prost = -1;
for(i = n; i <= 2*n; i++) 
{
 if(isprime(i))
 {
   if(prost > 1)
   {
    if(i - prost == 2)
    std::cout<<prost<<"-"<<i<<"==2"<<std::endl;
   }
   prost := i;
 }
}
0
valeriikozlov
Эксперт С++
4697 / 2522 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
18.11.2010, 06:56 11
mikutu, Можно еще проще:
C++
1
2
3
4
5
6
7
8
9
10
prost = -3;
for(i = n; i <= 2*n; i++) 
{
 if(isprime(i))
 {
    if(i - prost == 2)
    std::cout<<prost<<"-"<<i<<"==2"<<std::endl;
    prost := i;
 }
}
И еще можно переделать isprime(), что бы быстрее работала, и еще можно для ускорения сделать перебор по i только нечетных чисел
0
mikutu
27 / 27 / 10
Регистрация: 29.04.2009
Сообщений: 90
18.11.2010, 07:15 12
valeriikozlov
Согласен так меньше проверок, но имхо незнакомый ранее с этим кодом человек потратит наверно чуть больше времени понимая что к чему (0-(-3)=3, 1-(-3)=4, 2-(-3)=5, 3-2=1, 4-3=1, ...), а студент при сдаче лабы может и не сообразить что ответить на вопрос преподавателя почему такое условие и достаточно ли оно.
0
18.11.2010, 07:15
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2010, 07:15

Имеются ли среди чисел n+1,...,2n простые числа, разность между которыми равна двум
Дано число n&lt;= 15. Выяснить, имеются ли среди чисел n+1,...,2n простые числа, разность между...

Есть ли среди данных чисел «близнецы», т.е. простые числа, разность между которыми = 2
Дано натуральное число n. Напишите программу, определяющую, есть ли среди чисел n, n+1, …, 2n...

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


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

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

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