IPB

Здравствуйте, гость ( Вход | Регистрация )

> Проверка чисел на простоту
Sergio Ramos
сообщение 28.4.2011, 12:26
Сообщение #1


Студент
**

Группа: Продвинутые
Сообщений: 86
Регистрация: 16.11.2010
Город: Saratov



Код
#include "iostream"
#include "vector"

using namespace std;

int f(int n) {
                vector<char> prime (n+1, true);
prime[0] = prime[1] = false;
for (int i=2; i<=n; ++i)
        if (prime[i])
                for (int j=i*i; j<=n; j+=i)
                        prime[j] = false;
return prime[n];}

int main () {
        int n;
        cin >> n;
        int *a=new int [n];
        for (int i=0;i<n;i++) {cin >> a[i];
        if (f(a[i])) cout << "YES" << endl; else cout << "NO" << endl;}

        
return 0;}


Числа в диапазоне от 1 до 10^9. По времени работает нормально, но, я так понимаю, на слишком больших числах использует много памяти. Как можно переделать?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов(1 - 3)
Vahappaday
сообщение 28.4.2011, 15:32
Сообщение #2


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



не совсем понял логику того, что происходит в f().
Я бы сделал так:
1. Считать n чисел.
2. Найти максимальное.
3. Найти все простые до sqrt(n), записав их в массив.
4. Поочередно смотреть остаток от деления всех пользовательских чисел на все найденные простые. Если хотя бы в одном случае остаток 0 - число не простое, иначе - простое.

Попробуйте сами код, если что - помогу.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sergio Ramos
сообщение 28.4.2011, 16:34
Сообщение #3


Студент
**

Группа: Продвинутые
Сообщений: 86
Регистрация: 16.11.2010
Город: Saratov



Цитата(Vahappaday @ 28.4.2011, 15:32) *

не совсем понял логику того, что происходит в f().

Решето Эратосфена

Была такая идея, но проблема в построении ряда простых чисел, меньших sqrt[max(n)]
Почитал про тест BPSW, он достаточно объемный, потому что проверяет кучу условий. но работает нормально. задачу сделал
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 28.4.2011, 16:38
Сообщение #4


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



хм)) интересный, не видел раньше) спасибо)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 25.5.2025, 19:38

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru