С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
#1

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

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

Выдаёт ошибку выполнения: деление на 0 в строке 13. Подскажите, что не так?
код
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++):

Проверка простоты числа - C++
Объясните плиз что значит =! , pc - это функция проверки на простоту числа do { cout &lt;&lt; &quot;Vvedite prostoe P: &quot;; cin &gt;&gt; p; ...

Проверка простоты чисел - C++
Ребят,вот прожка...проверка простоты чисел на основе малой теоремы ферма... #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

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

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

Тест в С++ - C++
Как сделать что бы выдавал результат по общим ответам..ну 100-90% правильно то оценка 5 и т.д. ??? проблемный кусок ниже выделил ...

Тест по c++ - C++
Вариант 3 1. Есть ли тут ошибка, если да, то какая? class T { int p; public: void f(int a); }; 2.Если тело метода f...

12
mirax
0 / 0 / 0
Регистрация: 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 / 0
Регистрация: 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 / 0
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 15:05 #4
Вектор подключен.
http://fotohost.kz/images/2012/10/06/FsyYw.jpg
скрин
0
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178
06.10.2012, 15:09  [ТС] #5
Ну тогда не знаю... А Вы чем компилируете?
0
mirax
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 15:12 #6
dev c++ 4.9.9.2 скрин ошибки на пост выше
0
BumerangSP
4287 / 1409 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.10.2012, 15:14 #7
vlad_light, надо проверить переменную iter. Она, случаем, не нулю равна?
0
softmob
1248 / 698 / 155
Регистрация: 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 / 0
Регистрация: 24.09.2012
Сообщений: 178
06.10.2012, 16:16  [ТС] #9
С предыдущей ошибкой разобрался...
softmob, я хочу написать код, который будет проходить не по всем целым числам, а только по простым. Скажем, для одного числа Ваш алгоритм работает быстрее, но вот если нужно будет проверить много чисел, то массив из простых чисел мне поможет. Правда, я только сейчас понял, что написал совсем не то, что нужно: нужно создать отдельный массив, которй я буду "обучать" при вводе чисел.
Сейчас займусь написанием кода, позже выложу.

Не по теме:

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

0
mirax
0 / 0 / 0
Регистрация: 05.10.2012
Сообщений: 13
06.10.2012, 16:18 #10
Цитата Сообщение от softmob Посмотреть сообщение
cbegin() и auto появились только в 11 стандарте.
Мне это не очем не говорит. Можно пояснений? Такой код компилировать в visual studio 2011 тогда?
0
vlad_light
4 / 4 / 0
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2012, 01:05
Привет! Вот еще темы с ответами:

тест по С++ - C++
Всем привет! завтра у меня будет тест по С++(проходили мы его ровно один семестр) . Какие разделы разделы следует повторить ? Просто все...

Тест! - C++
Помогите пожалуйста с тестом. Есть тест состоит из трех текстовых файлов 1: Вопросы 2: Ответы 3: Результат. Нужно что бы он был без...

Тест по С++ - C++
Здравствуйте!Помогите,пожалуйста, с решением теста по С++, ответы мне нужны до утра 7. What is correct about virtual function? Select...

C++ тест - C++
здравствуйте,извините за беспокойство.нужно написать программу-тест на с++,вопрос вот в чем: как сделать так,чтобы вопросы в тесте...


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

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

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