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

функция поиска простых чисел - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
05.06.2012, 13:46     функция поиска простых чисел #1
не могу сделать функции для поиска простых чисел,
вот код функции
C++
1
2
3
4
5
6
7
8
int prost(int x)
{
  if (x/2)
   return true;
   else 
      return false;
 
}
но он работает не правильно ? что надо исправить
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
05.06.2012, 13:59     функция поиска простых чисел #2
ерунда там потому что. Простое число делится только на 1 и на само себя. а у вас в проверке просто х/2. Проверка должна быть типа
if ((x%2==0)||(x%3==0)||(x%5==0)||(x%7==0)). Ну и естественно исключить числа 3 5 7
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
05.06.2012, 14:13  [ТС]     функция поиска простых чисел #3
Цитата Сообщение от Alt_Shift Посмотреть сообщение
ерунда там потому что. Простое число делится только на 1 и на само себя. а у вас в проверке просто х/2. Проверка должна быть типа
if ((x%2==0)||(x%3==0)||(x%5==0)||(x%7==0)). Ну и естественно исключить числа 3 5 7
мне надо проверить числа от 1 до 100, это что каждое писать ?
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
05.06.2012, 14:16     функция поиска простых чисел #4
C++
1
2
3
4
5
6
7
8
#include <cmath>
 
bool IsSimple(unsigned x) {
    for (unsigned i = sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
    return true;
}
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
05.06.2012, 14:55  [ТС]     функция поиска простых чисел #5
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
#include <cmath>
 
bool IsSimple(unsigned x) {
    for (unsigned i = sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
    return true;
}
ошибки при компиляции
C:\Users\111\Desktop\Çàêàç2.cpp In function `bool prost(int)':
28 C:\Users\111\Desktop\Çàêàç2.cpp new declaration `bool prost(int)'
6 C:\Users\111\Desktop\Çàêàç2.cpp ambiguates old declaration `int prost(int)'
C:\Users\111\Desktop\Çàêàç2.cpp In function `bool prost(int)':
29 C:\Users\111\Desktop\Çàêàç2.cpp [Warning] converting to `int' from `double'
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
05.06.2012, 16:23     функция поиска простых чисел #6
Очевидно, Вы не удалили свою функцию.
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
05.06.2012, 18:56  [ТС]     функция поиска простых чисел #7
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
Очевидно, Вы не удалили свою функцию.
удалил, вот код
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
#include <vector>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int prost(int);
int main()
{
    vector <int> v;
    int temp;
    bool x;
    while(cin >> temp)
    {
      
      x = prost(temp);
      if(x)
       v.push_back(temp);
       }
       sort(v.begin(), v.end());
       for (int i=0; i<v.size(); i++)
       cout << "v[" << i << "]= " << v[i] << endl;  
       
    
system("pause");
return 0;
}
int prost(int x) 
{
    for (int i = sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
        else
    return true;
    
}
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
05.06.2012, 19:11     функция поиска простых чисел #8
Цитата Сообщение от Sylar9 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
int prost(int x) 
{
    for (int i = sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
        else
    return true;
}
Зачем Вы написали else?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.06.2012, 19:35     функция поиска простых чисел #9
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 <iostream>
#include <cstring>
 
 
int main() {
   std::size_t size = 1000;
   bool *simpleArray = new bool [ size ]();
   
   for ( std::size_t i = 2; i < size; i++ ) {
      if ( !simpleArray[ i ])
         for ( std::size_t j = i + i; j < size; j += i )
            simpleArray[ j ] = true;
   }
   
   for ( std::size_t i = 2; i < size; i++ )
      if ( !simpleArray[ i ])
         std::cout << i << ' ';
   
   std::cout << std::endl;
   
   delete [] simpleArray;
   
   return 0;
}
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
05.06.2012, 19:51     функция поиска простых чисел #10
Toshkarik, мне кажется, слишком громоздко (по памяти). Да и при таком алгоритме больше бы подошел std::bitset<unsigned>.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.06.2012, 19:58     функция поиска простых чисел #11
Совсем не громоздко, это простейший алгоритм "Решето Эратосфена". А так всегда стоит выбор между производительностью и расходом памяти.
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
06.06.2012, 08:09  [ТС]     функция поиска простых чисел #12
Цитата Сообщение от Toshkarik Посмотреть сообщение
Совсем не громоздко, это простейший алгоритм "Решето Эратосфена". А так всегда стоит выбор между производительностью и расходом памяти.
Мне надо создать функция

Добавлено через 3 минуты
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
Зачем Вы написали else?
убрал else все равно ошибки при компиляции
C:\Users\111\Desktop\Çàêàç2.cpp In function `int prost(int)':
30 C:\Users\111\Desktop\Çàêàç2.cpp invalid operands of types `int' and `double' to binary `operator%'
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 08:57     функция поиска простых чисел #13
Цитата Сообщение от Sylar9 Посмотреть сообщение
invalid operands of types `int' and `double' to binary `operator%'
Зачем Вы сменили тип переменной i на double?
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
06.06.2012, 09:12  [ТС]     функция поиска простых чисел #14
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
Зачем Вы сменили тип переменной i на double?
не знаю, что так что так не работает
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 09:20     функция поиска простых чисел #15
Полностью рабочий код. От предложенного мной изначально отличается лишь явным приведением типа. Однако компилятор выдает только предупреждение, а не ошибку.
C++
1
2
3
4
5
6
7
8
#include <cmath>
 
bool IsSimple(unsigned x) {
    for (unsigned i = (unsigned)sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
    return true;
}
Sylar9
-20 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,888
Записей в блоге: 1
06.06.2012, 10:22  [ТС]     функция поиска простых чисел #16
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
Полностью рабочий код. От предложенного мной изначально отличается лишь явным приведением типа. Однако компилятор выдает только предупреждение, а не ошибку.
C++
1
2
3
4
5
6
7
8
#include <cmath>
 
bool IsSimple(unsigned x) {
    for (unsigned i = (unsigned)sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
    return true;
}
у меня в DEV C++ не создает exe файл с это ошибкой
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
06.06.2012, 10:39     функция поиска простых чисел #17
Ищите ошибку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cmath>
#include <iostream>
 
using namespace std;
 
bool IsSimple(unsigned x) {
    for (unsigned i = (unsigned)sqrt(x); i > 1; i--)
        if (!(x % i))
            return false;
    return true;
}
 
int main() {
    unsigned x;
    cin >> x;
    cout << IsSimple(x)? "true": "false";
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 10:58     функция поиска простых чисел
Еще ссылки по теме:

Эффективный алгоритм поиска простых чисел на С++ C++
Функция по нахождению простых чисел на интервале C++
C++ Функция определения простых чисел

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
06.06.2012, 10:58     функция поиска простых чисел #18
Вот достаточно быстрый алгоритм нахождения простых чисел http://ru.wikipedia.org/wiki/Решето_Аткина

Добавлено через 55 секунд
Цитата Сообщение от Sylar9 Посмотреть сообщение
у меня в DEV C++ не создает exe файл с это ошибкой
Скомпилируйте с командной строки, так ведь проще будет.
Yandex
Объявления
06.06.2012, 10:58     функция поиска простых чисел
Ответ Создать тему
Опции темы

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