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

Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) - C++

Восстановить пароль Регистрация
 
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
07.04.2013, 20:15     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #1
Здравствуйте, дорогие форумчане.
-----------------------------------
Мне нужна ваша помощь.
Вот, собственно, задание:
Для всех натуральных чисел, не превосходящих заданного числа N, найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M.
-----------------------------------
Вот моя программа:
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
using namespace std;
 
int main()
{long N,s,c,z,i,j,y;
 setlocale (LC_ALL, "rus");
 int f,k,fl2,k1,k2,fl,ind;
 system("cls"); 
 cout<<"Введите число N: \n";
 cout<<"\nN=";
 cin>>N;
 s=0;ind=0;
 f=0;fl=1;
 c=1;fl2=1;
 for(k=1;k<N;k++)
     c*=10;
 c*=N;
 for(i=31;i<=c;i=i+2)
    {
     for(j=3;j<i;j=j+2)
           {
             z=i%j;
             if(z==0)
                {
                  fl=0;
                }
          }
     if(fl==1)
        {
          for(y=i;y>0;y/=10)
                s+=(y%10);
          if(s==N)
             {
              for(y=i;y>0;y/=10)
                   {
                     k1=y%10;
                     k2=((y/10)%10);
                     if(y<10)
                     if(k2==0)
                     k2=k1+1;
                     if(k1>=k2)
                     fl2=0;
                   }
               if(fl2==1)
                {
                  ind++;
                  cout<<"\n"<<ind<<"-e число: "<<i<<endl;
                  f=1;
                }
              }
         fl2=1;
       }
     fl=1;s=0;
    }
 if(f==0)
      cout<<endl<<"\nТаких простых чисел нет!"<<endl;
  cout<<"\nКонец.";
 getch();
}
-------------------
Но у меня не так выводит.
Должно выводиться вот так:
N=50
M=4
Ответ: 13
------------------
Т.е. цифры числа должны складываться. Так как M=4, то 1+3=4, исходя из этого, ответ: 13. (Рассматриваем только простые числа)
------------------
Подскажите, пожалуйста, как допилить программу, как мне надо. За ранее - спасибо. С меня много +.

Добавлено через 11 минут
Никто не выручит?

Добавлено через 17 минут
Пожалуйста, помогите.

Добавлено через 39 минут
АП.

Добавлено через 35 минут
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
#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
int main()
 
{
    system("cls");
int N,M,i,j,k;
 
 cout<<"Vvedite N:\n\nN=";
 cin>>N;
  cout<<"Vvedite M:\n\nM=";
 cin>>M;
 
 if (M>490) cout<<"\ntakie chisla v dannoi programme ne rassmatrivautcya";
 else
 {
  cout<<endl<<"Rezul'tat:\n\n";
  if (M<3) cout<<"takih chisel net";
  else {
 
 for(i=0;i<9;i++)
   for(j=0;j<9;j++)
     for(k=1;k<=9;k++)
 
       if((i<j)&&(j<k)&&((i+j+k)==M))  cout<<i<<j<<k<<" ";
      }
 }
 getch(); }
Примерно разобрался, только один вопрос:
Куда в эту программу нужно вставить код проверки на простые числа?

Добавлено через 8 минут
АП.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 20:15     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M)
Посмотрите здесь:

C++ Получить все трехзначные натуральные числа, сумма цифр которых равна m
Найти все простые числа от 1000 до 1999, в каждом из которых сумма первой и второй цифр в записи этого числа равна сумме третьей и четвертой. C++
C++ Обработка целых данных (найти все простые числа, имеющие возрастающую последовательность, сумма цифр которых равна M)
C++ Найти все четырёхзначные числа, у которых сумма крайних цифр равна сумме средних цифр, а само число делится на 6 и 27
Найти все трехзначные числа, сумма цифр которых равна данному целому числу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
09.04.2013, 16:08  [ТС]     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #2
Никто не поможет?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 16:57     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #3
sanyachel9binsk,
Скажите ограничения. (MaxN Время память итд)

Добавлено через 3 минуты
sanyachel9binsk, хотите я вам напишу эту программу по-нормальному ?

Добавлено через 38 минут
sanyachel9binsk,
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
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <stack>
#include <deque>
#include <set>
#include <string>
#include <limits>
 
using namespace std;
 
int n, m;
vector <pair<int, int>> ans;
vector <bool> er;
 
void brute(int num, int sum){
    if (num > n || sum > m){
        return;
    }
    if (er[num] && sum == m)
        ans.push_back(make_pair(num, sum));
    for (int i = (num%10) + 1; i < 10; i++){
        brute(num*10 + i, sum + i);
    }
}
 
int main(){
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    cin >> n >> m;
    er = vector <bool> (n+1, true);
    er[0] = er[1] = false;
    int p = 2;
    while (p <= n){
        bool f  = true;
        while (!er[p]){
            p++;
            if (p > n){
                f = false;
                break;
            }
        }
        if (!f)
            break;
        int k = 2*p;
        while (k <= n){
            er[k] = false;
            k += p;
        }
        p++;
    }
    brute(0, 0);
    for (int i = 0; i < ans.size(); i++)
        printf("num = %d sum = %d\n", ans[i].first, ans[i].second);
    return 0;
}
Пример:
50000 17
Вывод:
num = 12347 sum = 17
num = 1259 sum = 17
num = 1367 sum = 17
num = 179 sum = 17
num = 2357 sum = 17
num = 269 sum = 17
num = 359 sum = 17
num = 467 sum = 17
num = 89 sum = 17
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
09.04.2013, 18:48  [ТС]     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #4
У меня все равно ошибку выводит.
Миниатюры
Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M)  
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 18:56     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #5
sanyachel9binsk, вы
C++
1
2
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
убрали ?
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
09.04.2013, 19:00  [ТС]     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #6
Цитата Сообщение от Ternsip Посмотреть сообщение
sanyachel9binsk, вы
C++
1
2
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
убрали ?
Теперь убрал. НО. У меня теперь только как ввел значения и нажал enter - сразу окно вылетает. Хоть гетч и конио добавил.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
09.04.2013, 19:02     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #7
sanyachel9binsk, попробуйте system("PAUSE");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2013, 19:03     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M)
Еще ссылки по теме:

Найти все трехзначные числа, состоящие из разных цифр, сумма которых равна А C++
C++ Найти все четырехзначные числа у которых сумма первых двух цифр равна сумме двух последних
Найти все трехзначные числа, сумма цифр которых равна заданному целому числу C++

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

Или воспользуйтесь поиском по форуму:
sanyachel9binsk
1 / 1 / 0
Регистрация: 27.10.2012
Сообщений: 209
09.04.2013, 19:03  [ТС]     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M) #8
Цитата Сообщение от sanyachel9binsk Посмотреть сообщение
Теперь убрал. НО. У меня теперь только как ввел значения и нажал enter - сразу окно вылетает. Хоть гетч и конио добавил.
А нет. Теперь всё нормально. Спасибо за помощь)
Yandex
Объявления
09.04.2013, 19:03     Помочь доделать программу (найти все простые числа, имеющие возрастающую последовательность цифр, сумма которых равна M)
Ответ Создать тему
Опции темы

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