Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
#1

Тест простоты - C++

06.10.2012, 13:09. Просмотров 1203. Ответов 12
Метки нет (Все метки)

Выдаёт ошибку выполнения: деление на 0 в строке 13. Подскажите, что не так?
http://www.cyberforum.ru/cpp-beginners/thread1576276.html
код
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
long prime_test (const long& x)
{
    std::vector<long> primes (2);
 
    if ((x != 2) && (x % 2 == 0))
        return 2;
 
    for (long i = 3; i <= (long)sqrt ((double)x) + 1; ++i)
    {
        int if_prime = 1;
 
        for (auto iter = primes.cbegin(); (*iter <= (long) sqrt ((double) i) + 1) && (if_prime != 0); ++iter)
            if (i % *iter == 0)
                if_prime = 0;
 
        if (if_prime == 1)
        {
            if (x % i == 0)
                return i;
            else
                primes.push_back (i);
        }
    }
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 13:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Тест простоты (C++):

Проверка простоты чисел
Ребят,вот прожка...проверка простоты чисел на основе малой теоремы ферма... ...

Программа проверки простоты по алгоритму
Алгоритм описан ниже на фото , нужно чтоб пользователь вводил число n и...

Исследовать эффективность двух алгоритмов определения простоты числа
дали задание: Цель: Следует выбрать эффективный алгоритм (по времени) теста...

Следует выбрать эффективный алгоритм (по времени) теста простоты числа
Следует выбрать эффективный алгоритм (по времени) теста простоты числа. На...

Написать функцию проверки простоты числа, найти сумму двузначных простых
Написать функцию, определяющую является ли число X простым. С ее помощью найти...

12
mirax
0 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 14:34 #2
У меня не компилиться, выдает ошибку на 12 строке про
C++
1
primes.cbegin(
Есть другой код на тест простоты чисел, но не знаю устроит ли он вас.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int n;
int i;
int is_prime;
is_prime=true;
cout<<"Enter number";
cin>>n;
i=2;
while(i<=sqrt(static_cast<double>(n)))
{
if (n% i==0)
is_prime=false; i++;
 
if(is_prime)
cout<<"number is prime";
else cout<< "number is not prime";
return 0;
}
}
Если вам имено через векторы нужно, то не знаю.
0
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
06.10.2012, 15:02  [ТС] #3
Видимо, у Вас не подключен vector
C++
1
#include <vector>
И мой код по-интереснее будет:
1. он проходит только по простым числам
2. если у меня заменить в конце return 0 на return x, и сделать некоторые косметические изменения, то его можно использовать для факторизации чисел на простые множители.
0
mirax
0 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 15:05 #4
Вектор подключен.
http://fotohost.kz/images/2012/10/06/FsyYw.jpg
скрин
0
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
06.10.2012, 15:09  [ТС] #5
Ну тогда не знаю... А Вы чем компилируете?
0
mirax
0 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 15:12 #6
dev c++ 4.9.9.2 скрин ошибки на пост выше
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.10.2012, 15:14 #7
vlad_light, надо проверить переменную iter. Она, случаем, не нулю равна?
0
softmob
1249 / 699 / 359
Регистрация: 20.02.2010
Сообщений: 1,035
06.10.2012, 15:41 #8
Цитата Сообщение от mirax Посмотреть сообщение
У меня не компилиться, выдает ошибку на 12 строке про
Код C++
1
primes.cbegin
cbegin() и auto появились только в 11 стандарте.

Добавлено через 3 минуты
vlad_light, не совсем понял зачем столько всего наворочено, вам просто нужно проверить является ли число простым?
C++
1
2
3
4
5
6
7
bool prime_test(const long& x)
{
    for (long i = 2; i * i <= x; ++i)
        if (x % i == 0)
            return false;
    return true;
}
0
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
06.10.2012, 16:16  [ТС] #9
С предыдущей ошибкой разобрался...
softmob, я хочу написать код, который будет проходить не по всем целым числам, а только по простым. Скажем, для одного числа Ваш алгоритм работает быстрее, но вот если нужно будет проверить много чисел, то массив из простых чисел мне поможет. Правда, я только сейчас понял, что написал совсем не то, что нужно: нужно создать отдельный массив, которй я буду "обучать" при вводе чисел.
Сейчас займусь написанием кода, позже выложу.

Не по теме:

Мне это программа нужна не для поиска простых чисел, а для оттачивания навыков c++. Поэтому, неэффекттивность данного алгоритма для меня, в принципе, не имеет значения.

0
mirax
0 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 16:18 #10
Цитата Сообщение от softmob Посмотреть сообщение
cbegin() и auto появились только в 11 стандарте.
Мне это не очем не говорит. Можно пояснений? Такой код компилировать в visual studio 2011 тогда?
0
vlad_light
4 / 4 / 1
Регистрация: 24.09.2012
Сообщений: 178
06.10.2012, 16:27  [ТС] #11
Не знаю, у меня почему-то тоже не компилируется в wxDev-C++, хотя я думал, что он поддерживает C++11.
C++11 это новый стандарт языка C++, пришёл на смену C++98. В новом стандарте внесли некоторые изменения, которые можно прочесть, например, здесь: http://ru.wikipedia.org/wiki/C%2B%2B11
Скорее всего, wxDev-C++ выпустили до появления стандарта C++11, поэтому функции, которые были внесены в этом стандарте wxDev-C++ не поддерживает. Я использую MS VS C++ 2010.
0
silent_1991
07.10.2012, 19:25
  #12

Не по теме:

Цитата Сообщение от vlad_light Посмотреть сообщение
C++11 это новый стандарт языка C++, пришёл на смену C++98
На смену 98 приходил ещё 2003 и пара дополнений. А уж им на смену уже и пришёл с++0х.

0
vlad_light
08.10.2012, 01:05  [ТС]     Тест простоты
  #13

Не по теме:

Прошу прощения за ложную информацию, просто скопировал из вики

0
08.10.2012, 01:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2012, 01:05
Привет! Вот еще темы с ответами:

Тест
Ребята помогите хто чем может!) 1) Предоставление заместителя или...

C++ тест
нужно ввести константу, чтобы в итоге она выводилась как оценка в этого теста:...

Тест по С++
Здравствуйте!Помогите,пожалуйста, с решением теста по С++, ответы мне нужны до...

Тест по c++
Помогите зарешать тест, буду признателен


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

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

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