Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
dimoncheg
Форумчанин
9 / 9 / 1
Регистрация: 18.10.2012
Сообщений: 141
05.12.2012, 15:12     Найти все натуральные числа от промежутка от 0 до 200. Проверить задачу
  #1
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S (S вводить с клавиатуры).

Что-то попытался, но ответ пишет странный мягко говоря. Подскажите пожалуйста что-нибудь по этому поводу. Заранее спасибо.

Код 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 <stdio.h> 
#include <stdlib.h> 
 
main() 
{ 
       int S,x, n,i;
printf("\n Введите S: "); 
 scanf("%d", &S); 
 
 
for (n = 1; n <= 200; n++){
    x=0;
    for (i = 1;i <= n; i++){
     
        if (n % i == 0){    
              x=x+i;
             
        } 
        if(S==x){ printf("%d\n", x);}
            }
}
 
system("pause");
}
AdAgent
Объявления
05.12.2012, 15:12
ps10n1ck
Форумчанин
50 / 44 / 1
Регистрация: 10.11.2010
Сообщений: 132
05.12.2012, 15:41
  #2
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S
если я правильно понял, то это выглядит так:
промежуток: (1, 2, 3, 4, 5 .... 200]
в данном варианте сумма делителей если я правильно понял - разложение числа из промежутка на простые числа и проверка суммы этих простых чисел на равенство S?
dimoncheg
Форумчанин
9 / 9 / 1
Регистрация: 18.10.2012
Сообщений: 141
05.12.2012, 15:52  [ТС]
  #3
Цитата Сообщение от ps10n1ck Посмотреть сообщение
если я правильно понял, то это выглядит так:
промежуток: (1, 2, 3, 4, 5 .... 200]
в данном варианте сумма делителей если я правильно понял - разложение числа из промежутка на простые числа и проверка суммы этих простых чисел на равенство S?
Кажется да.. Я просто мягко говоря не очень силен в С++, мне тут один человечек помог и убежал, а я вот сижу и разбираюсь, и на ответ выводит всякую бяку. Целый час сижу и пытаюсь в суть проблемы вникнуть. Может можно по-другому реализовать?
ps10n1ck
Форумчанин
50 / 44 / 1
Регистрация: 10.11.2010
Сообщений: 132
05.12.2012, 15:56
  #4
постараюсь что-то придумать, пока алгоритма нормального не придумал, все что в голову приходит, это просто методом перебора, но это тупо =). В течении дня, появится свободное время - попробую реализовать что-то путное.
dimoncheg
Форумчанин
9 / 9 / 1
Регистрация: 18.10.2012
Сообщений: 141
05.12.2012, 16:16  [ТС]
  #5
Цитата Сообщение от ps10n1ck Посмотреть сообщение
постараюсь что-то придумать, пока алгоритма нормального не придумал, все что в голову приходит, это просто методом перебора, но это тупо =). В течении дня, появится свободное время - попробую реализовать что-то путное.
ваш ответ в теме уже что-то для меня значит, уже большое спасибо) теперь буду молиться чтобы мне или вам пришло в голову "что-то путное".
ps10n1ck
Форумчанин
50 / 44 / 1
Регистрация: 10.11.2010
Сообщений: 132
08.12.2012, 15:20     Найти все натуральные числа от промежутка от 0 до 200. Проверить задачу
  #6
Код 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
#include <iostream>
#include <vector>
#include <numeric>
 
using std::cout;
using std::cin;
using std::endl;
 
typedef unsigned int uint;
 
int main(){
  setlocale(LC_ALL, "Rus");
  uint S = 0;
  uint sum = 0;
 
  cout << "Введите сумму делителей: ";
  cin >> S;
 
  std::vector<int> v;
  std::vector<int> vsum;
  std::vector<int>::iterator i;
 
  for(uint i = 1; i <= S; ++i){
    for(uint j = 1; j <= i; ++j) {
      if(i%j == 0)
        v.push_back(j);
    }
  sum = std::accumulate(v.begin(), v.end(), 0);
  if(sum == S)
    vsum.push_back(i);
  v.erase(v.begin(), v.end());
  }
  
  if(vsum.size() > 0){
    cout << "Натуральные числа из промежутка у которых сумма делителей = " << S << endl;
    for(i = vsum.begin(); i != vsum.end(); ++i)
      cout << *i << " ";
    cout << endl;
  }
  else
    cout << "Промежуток не содержит натуральных чисел у которых сумма делителей = " << S << endl;
 
   
   system("pause");
return 0;
}
Yandex
Объявления
08.12.2012, 15:20
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Ответов Автор Дата
C++ Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N
Найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N (N вводить с клавиатуры).
С++ для начинающих 2 kissik 14.05.2014 18:48
C++ Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S. (S вводить с клавиатуры) #include <stdio.h> #include <conio.h> #include <locale.h> #include...
С++ для начинающих 3 Любовь1993 16.04.2014 03:32
C++ Найти все натуральные числа, не превосходящие числа n, которые можно представить в виде суммы слагаемых
Заданы три натуральных числа a, b, n. Найти все натуральные числа, не превосходящие числа n, которые можно представить в виде суммы ( произвольного числа ) слагаемых, каждое из которых равно либо...
С++ для начинающих 7 Avalan4er 16.02.2014 02:17
C++ Найти все целые положительные числа a,b,c из промежутка
3) Найти все целые положительные числа a,b,c из промежутка (0,100) такие что a^3+b^2=c^2. P.S. в первой и второй задаче желателен вод с клавиатуры. Заранее благодарю.
С++ для начинающих 2 mmeexx 23.12.2013 22:46
C++ 8.27. Найти все целые числа из промежутка от 1 до 300 у которых ровно пять делителей
8.27. Найти все целые числа из промежутка от 1 до 300 у которых ровно пять делителей.
С++ для начинающих 3 DRUNY195 26.11.2013 18:11
C++ Найти все натуральные числа из промежутка от k до l, у которых количество делителей превышает заданное число m
Люди добрые и мудрые. Как сделать сие чудо. Найти все натуральные числа из промежутка от k до l, у которых количество делителей превышает заданное число m
С++ для начинающих 3 Vlad9508 25.12.2012 01:34
C++ Найти все натуральные числа из промежутка от 1 до 200, у которых сумма четных делителей равна N (проверить)
Найти все натуральные числа из промежутка от 1 до 200, у которых сумма четных делителей равна N #include "stdafx.h" #include <iostream> #include <locale> using namespace std; void _tmain() ...
С++ для начинающих 2 Shnichel 16.12.2012 00:41
C++ Найти все натуральные числа из промежутка от 1 до 200. Проверить программу
Здравствуйте. Пожалуйста подскажите в чем тут ошибка? Выдаёт неккоректный ответ. Найти все натуральные числа из промежутка от 1 до 200, у которых сумма делителей равна S (S вводить с клавиатуры). ...
С++ для начинающих 4 dimoncheg 06.12.2012 17:27
Опции темы

Текущее время: 23:50. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.