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

Найти количество совершенных и простых чисел в последовательности - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
12.10.2010, 15:06     Найти количество совершенных и простых чисел в последовательности #1
Всем привет! Помогите пожалуйста!
Вводится последовательность целых чисел, 0 – конец последовательности. Найти количество совершенных и простых чисел в последовательности (результатами функций будет:1 – число простое, 0 – число непростое; 1 – число совершенное, 0 - нет).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2010, 15:06     Найти количество совершенных и простых чисел в последовательности
Посмотрите здесь:

Дана последовательность чисел. Найти количество различных чисел в этой последовательности C++
Дана последовательность чисел. Найти количество различных чисел в этой последовательности C++
C++ Каждое простое число последовательности увеличить в два раза, посчитать количество простых чисел в исходной последовательности
C++ Найти в одномерном массиве, состоящем из N целых чисел, количество простых элементов
Найти максимальное количество простых чисел, идущих подряд C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
12.10.2010, 15:45     Найти количество совершенных и простых чисел в последовательности #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
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
bool simple (int x)
{
    int i;
    if(x<=1)
        return 0;
    else
        for(i=2; i<=sqrt(x); i++)
            if (x%i==0)
                return 0;
    return 1;
}
bool perfect (int x)
{
    int i,sum=0;
    if (x>0)
    {
        for (i=1;i<=x/2;i++)
            if (x%i==0)
                sum+=i;
        if(x==sum)
            return 1;
    }
    return 0;
}
 
 
int main()
{
    const int SIZE=50;
    int n,i,array[SIZE];
 
    for(i=0; i<SIZE; i++)
    {
        cout<<"Vvedite element["<<i<<"]: ";
        cin>>array[i];
        if(array[i]==0)
            break;
    }
    n=i;
 
    for(i=0; i<n; i++)
    {
        cout<<"Element ["<<i<<"] = "
            <<array[i]<<" "
            <<(simple(array[i])?" Prostoe":"")
            <<(perfect(array[i])?" Sovershennoe":"")<<endl;
    }
    cout<<endl;
    system("pause");
    return 0;
}
Сделал через статический массив. Хотя тут логичнее наверное векотры использовать.
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
12.10.2010, 16:02  [ТС]     Найти количество совершенных и простых чисел в последовательности #3
А можно решить это задание не использую массив? Можно решить только через цикл?
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
12.10.2010, 18:26     Найти количество совершенных и простых чисел в последовательности #4
А, ну да, так ещё проще будет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    int i,n;
 
    while(true)
    {
        cout<<"Vvedite chislo: ";
        cin>>n;
        if(n==0) break;
        cout<<"Chislo "<<n<<" "
             <<(simple(n)?" Prostoe":" Ne prostoe")
             <<(perfect(n)?" Sovershennoe":" Ne sovershennoe")<<endl;
    }
 
    cout<<endl;
    system("pause");
    return 0;
}
Добавлено через 15 секунд
P.S. Функции simple и perfect те же.
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 07:46  [ТС]     Найти количество совершенных и простых чисел в последовательности #5
А что такое simple и perfect? у меня выдал ошибку.
error C3861: simple: идентификатор не найден и error C3861: perfect: идентификатор не найден.
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
14.10.2010, 07:49     Найти количество совершенных и простых чисел в последовательности #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
47
#include <iostream>
#include <math.h>
 
using namespace std;
 
bool simple (int x)
{
        int i;
        if(x<=1)
                return 0;
        else
                for(i=2; i<=sqrt(x); i++)
                        if (x%i==0)
                                return 0;
        return 1;
}
bool perfect (int x)
{
        int i,sum=0;
        if (x>0)
        {
                for (i=1;i<=x/2;i++)
                        if (x%i==0)
                                sum+=i;
                if(x==sum)
                        return 1;
        }
        return 0;
}
int main()
{
        int i,n;
 
        while(true)
        {
                cout<<"Vvedite chislo: ";
                cin>>n;
                if(n==0) break;
                cout<<"Chislo "<<n<<" "
                         <<(simple(n)?" Prostoe":" Ne prostoe")
                         <<(perfect(n)?" Sovershennoe":" Ne sovershennoe")<<endl;
        }
 
        cout<<endl;
        system("pause");
        return 0;
}
perfect - ф-ция для поиска совершенного, simple - для поиска простого числа.
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 10:28  [ТС]     Найти количество совершенных и простых чисел в последовательности #7
Уважаймый dihlofos, можно вопрос? почему для simple (int x) выпишете в цикле for i<=sqrt(x), ведь простые числа это i<=x/2. Просто какое бы число я не ввела,оно всегда не совершнное, хотя в инете посмотрела и знаю точно, что 6 и 28 совершенное число?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.10.2010, 10:34     Найти количество совершенных и простых чисел в последовательности #8
Я может несколько не в теме, но ведь simple проверяет, является число простым или нет, к совершенным эта функция не относится. Их проверяет функция prefect, а в ней цикл идёт до как раз x/2.
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 10:45  [ТС]     Найти количество совершенных и простых чисел в последовательности #9
Вы права.Но как раз простые числа должны идти до х/2

Добавлено через 4 минуты
Просто когда я запускаю Ваш код,у меня выводит ошибку, он ругается на sqrt

Добавлено через 2 минуты
Может я что-то не понимаю и не догоняю.Объясните пожалуйста,если не трудно.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
14.10.2010, 10:46     Найти количество совершенных и простых чисел в последовательности #10
http://ru.wikipedia.org/wiki/Решето_Эратосфена
Основная фраза: "останавливать алгоритм можно, когда p^2 станет больше, чем n"
p в данном случае - i, а n - x. "когда p^2 станет больше, чем n" - то же самое, что "когда p станет больше, чем sqrt(n)"
Попробуйте написать в начале вместо math.h cmath
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
14.10.2010, 13:52     Найти количество совершенных и простых чисел в последовательности #11
Селявкина Мария, у вас какой компилятор? Попробуйте сделать с приведением типов:
C++
1
for(i=2; i<=sqrt((double)x); i++)
Вообще верхней границей можно сделать и x/2 и больше, вплоть до x-1. Результат будет тот же, но с большими затратами(
Цитата Сообщение от Селявкина Мария Посмотреть сообщение
Просто какое бы число я не ввела,оно всегда не совершнное, хотя в инете посмотрела и знаю точно, что 6 и 28 совершенное число?
Считать должно правильно, проверял. Вот попробуйте такой код: выводит список всех простых и совершенных чисел от 0 до 1000:
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 <math.h>
 
using namespace std;
 
bool simple (int x)
{
        int i;
        if(x<=1)
                return 0;
        else
                for(i=2; i<=sqrt((double)x); i++)
                        if (x%i==0)
                                return 0;
        return 1;
}
bool perfect (int x)
{
        int i,sum=0;
        if (x>0)
        {
                for (i=1;i<=x/2;i++)
                        if (x%i==0)
                                sum+=i;
                if(x==sum)
                        return 1;
        }
        return 0;
}
int main()
{
    int n;
    cout<<"Perfect:\n";
    for(n=0; n<10000; n++)
        if(perfect(n))
            cout<<n<<'\t';
 
    cout<<"\n\nSimple:\n";
    for(n=0; n<10000; n++)
        if(simple(n))
            cout<<n<<'\t';
 
    cout<<endl;
    system("pause");
    return 0;
}
Сверьтесь с википедией)
Миниатюры
Найти количество совершенных и простых чисел в последовательности  
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 15:15  [ТС]     Найти количество совершенных и простых чисел в последовательности #12
У меня стоит Microsoft Visual Studio 2008
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
14.10.2010, 15:19     Найти количество совершенных и простых чисел в последовательности #13
C++
1
for(i=2; i<=sqrt((double)x); i++)
Попробовали так сделать? Работает? Сам на студии проверял)
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 15:23  [ТС]     Найти количество совершенных и простых чисел в последовательности #14
Спасибо!Все заработало
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
21.10.2010, 20:22  [ТС]     Найти количество совершенных и простых чисел в последовательности #15
А как теперь сделать,чтобы программа выводила кол-во совершенных ипростых чисел?
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.10.2010, 07:16     Найти количество совершенных и простых чисел в последовательности #16
Селявкина Мария, ввести дополнительно счётчики для этих чисел:

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
int main()
{
int i,n;
int sCount=0, pCount=0;
 
while(true)
{
    cout<<"Vvedite chislo: ";
    cin>>n;
    if(n==0) break;
    cout<<"Chislo "<<n;
 
    if(simple(n))
    {
        cout<<" Prostoe";
        sCount++;
    }
    else
        cout<<" Ne prostoe";
 
    if(perfect(n))
    {
        cout<<" Sovershennoe\n";
        pCount++;
    }
    else
        cout<<" Ne sovershennoe\n";
}
 
cout<<"\nVsego prostyh: "<<sCount<<endl;
cout<<"\nVsego soverschrnnyh: "<<pCount<<endl;
 
cout<<endl;
system("pause");
return 0;
}
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
22.10.2010, 09:21  [ТС]     Найти количество совершенных и простых чисел в последовательности #17
Уважаемый dihlofos, огромное ва спсибо.Но у меня есть один вопрос-программа работает все хорошо,но в итоге она не выдает сколько я ввела простых,а сколько совершенных чисел???
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
22.10.2010, 09:42     Найти количество совершенных и простых чисел в последовательности #18
Селявкина Мария, а что выдаёт?
Миниатюры
Найти количество совершенных и простых чисел в последовательности  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2010, 09:48     Найти количество совершенных и простых чисел в последовательности
Еще ссылки по теме:

Найти количество двух- и количество трехразрядных чисел в заданной последовательности C++
Подсчитать количество простых чисел в последовательности, больших заданного числа М C++
C++ Найти количество отрицательных чисел и номера нулевых чисел в последовательности

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

Или воспользуйтесь поиском по форуму:
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
22.10.2010, 09:48  [ТС]     Найти количество совершенных и простых чисел в последовательности #19
Спасибо,я поняла,у меня ведь 0 конец последовательности.
Yandex
Объявления
22.10.2010, 09:48     Найти количество совершенных и простых чисел в последовательности
Ответ Создать тему
Опции темы

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