Форум программистов, компьютерный форум CyberForum.ru

Вывести последовательность элементов, сумма которых будет простым числом. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ программа С++ http://www.cyberforum.ru/cpp-beginners/thread401905.html
определить можно ли представить заданное натуральное число n как сумму квадратов каких нибудь двух натуральных чисел n,m (т.е N=n(квадрат)+m(квадрат) помогите пожалуйста вроде не сложно а начать не могу(
C++ можно ли представить заданное натуральное число n как сумму квадратов определить можно ли представить заданное натуральное число n как сумму квадратов каких нибудь двух натуральных чисел n,m (т.е N=n(квадрат)+m(квадрат) помогите пожалуйста вроде не сложно а начать не могу( http://www.cyberforum.ru/cpp-beginners/thread401896.html
C++ Визуализация алгоритмов сортировки
Нужно создать программу для визуализации 3 алгоритмов сортировки. Подскажите, как и на чем лучше делать?
C++ Интересная задачка
#include <iostream> #include <math.h> using namespace std; int main() { double z1,z2; double a,b,c,d,s,t,u; cout<<"Vvedite a,b,c,d,s,t,u"<<endl; cout<<"a="; cin>>a;
C++ Плиз...помогите решить задачу http://www.cyberforum.ru/cpp-beginners/thread401879.html
Имеется задача: Вводится целое число С. Если -9<=c<=9 вывести величину числа в словесной форме с учетом знака, в противном случае - предупреждающее сообщение и повторный ввод.
C++ Дан одномерный массив, состоящий из N вещественных элементов. Дан одномерный массив, состоящий из N вещественных элементов. Найти максимальный отрицательный элемент. Вычислить среднеарифметическое нечетных элементов массива. #include <vcl.h> #pragma hdrstop #include <iostream.h> #include <conio.h> #pragma argsused подробнее

Показать сообщение отдельно
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
08.12.2011, 22:36     Вывести последовательность элементов, сумма которых будет простым числом.
Вот, написал через рекурсию, находит все подпоследовательности, сумма елементов которых - простое число.
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
63
64
65
66
67
68
#include <stdio.h>
 
#define N  8
 
int buf[1000];
int bufp;
int sum;
 
void process_term(int pos, int *arr, int size);
 
int main()
{
    /* 
     * There is a one trick: the sequence is preceded by zero,
     * fake-element, which are the other terms processed by. 
     */
    int arr[N] = {0, 1, 2, 2, 3, 2, 4, 1};
    int i, b;
    
    printf("Sequence:");
    for (i = 1; i < N; i++)
        printf(" %d", arr[i]);
    putchar('\n');
 
    process_term(0, arr, N);
    
    for (i = 0; i < bufp; i++) {
        for (b = 1; b < N; b++) {
            if (buf[i] & (1 << b)) 
                printf("%d ", arr[b]);
        }
        printf("\n");
    }
    return 0;
}
 
int isprime(int);
 
void process_term(int pos, int *arr, int size)
{
    int localbuf, localsum;
 
    buf[bufp] |= 1 << pos;
    sum += arr[pos];
 
    localbuf = buf[bufp];
    localsum = sum;
 
    if (isprime(sum) && sum != arr[pos]) {
        bufp++;
        buf[bufp] = buf[bufp - 1];
    }
    for (pos += 1; pos < size; pos++) {
        process_term(pos, arr, size);
        sum = localsum;
        buf[bufp] = localbuf;
    }   
}
 
int isprime(int n)
{
    int i;
 
    for (i = 2; i < n; i++)
        if (n % i == 0)
            return 0;
    return 1;
}
вывод
Sequence: 1 2 2 3 2 4 1
1 2
1 2 2
1 2 2 3 2 1
1 2 2 3 4 1
1 2 2 2
1 2 2 2 4
1 2 3 2 4 1
1 2 3 4 1
1 2 3 1
1 2 2
1 2 4
1 2
1 2 3 2 4 1
1 2 3 4 1
1 2 3 1
1 2 2
1 2 4
1 3 2 4 1
1 3 2 1
1 3 1
1 2
1 2 4
1 4
1 1
2 2 3
2 2 3 2 4
2 2 3 4
2 2 2 4 1
2 2 2 1
2 2 1
2 3
2 3 2
2 3 2 4
2 2 1
2 4 1
2 1
2 3
2 3 2
2 3 2 4
2 2 1
2 4 1
2 1
3 2
3 4
2 4 1
2 1
4 1
Press any key to continue . . .


Есть "повторы", но они из разных элементов т.е.
1 2(второй элемент)
1 2(третий элемент)
при желании, можно убрать и их.
Сосредаточился на основной задаче, поэтому проверку на простату сделал самую тривиальную.
Да и размер буфера можно вычислить и память выделять динамически.

Байт, не смог понять ваш алгоритм : (
 
Текущее время: 21:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru