Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "самое большое простое число", которое можно найти на обычной пк. / 25 сообщений из 44, страница 1 из 2
04.11.2011, 12:36
    #37511644
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
помогите написать программу для нахождения большого простого числа желательно на с++
буду очень благодарен=)
...
Рейтинг: 0 / 0
07.11.2011, 17:25
    #37514789
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
...
Рейтинг: 0 / 0
07.11.2011, 17:28
    #37514795
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
А, уже есть ещё лучше .
...
Рейтинг: 0 / 0
07.11.2011, 19:04
    #37514966
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Судя по описанию - не то что-бы лучше. Совсем другой класс алгоритмов.
В отличие от Миллера-Рабина он сторого детерминирован.
...
Рейтинг: 0 / 0
08.11.2011, 14:49
    #37516219
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
mayton,

Ну, так поэтому и лучше - для озвученной задачи. Конечно, если нужно найти не "гарантировано простое число", а "скорее всего простое число, но быстро", то см. пункт 1.
...
Рейтинг: 0 / 0
08.11.2011, 18:04
    #37516725
Баскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
самого большого числа нет. комп может проверить любое число на простоту (соответвенно - если это не подходит, искать следующее до тех пор, пока не найдется нужное).
...
Рейтинг: 0 / 0
08.11.2011, 20:52
    #37516991
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
А вообще, какое самое большое число, которое можно получить на компьютере?
...
Рейтинг: 0 / 0
08.11.2011, 21:35
    #37517042
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
ShSergeА вообще, какое самое большое число, которое можно получить на компьютере?

придётся дать определение понятию "получить на компьютере"
...
Рейтинг: 0 / 0
09.11.2011, 01:13
    #37517273
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Изопропил,

например пока я смог получить из интервала от1 до 1000000000. это 53326267.
хотелось бы улучшить результаты.
...
Рейтинг: 0 / 0
09.11.2011, 02:02
    #37517302
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
серегй, из тебя информацию клещами надо вытаскивать Чего хотел-то?
...
Рейтинг: 0 / 0
09.11.2011, 08:48
    #37517437
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
mayton,

#include "stdafx.h"
#include<math.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<tchar.h>

*
* 2009-05-02 Mayton - Добавлен динамич. массив
* Добавлен вывод статистики
* Добавлен замер времени
*/

int _tmain(int argc, _TCHAR* argv[])
{
int time1=time(NULL);


int limit = 1000000000;
int sqr_lim;
//bool is_prime[1001];
bool *is_prime = new bool[limit+1];
int x2, y2;
int i, j;
int n;

// Инициализация решета
sqr_lim = (int)sqrt((long double)limit);
for (i = 0; i <= limit; i++) is_prime[i] = false;
is_prime[2] = true;
is_prime[3] = true;

// Предположительно простые - это целые с нечетным числом
// представлений в данных квадратных формах.
// x2 и y2 - это квадраты i и j (оптимизация).
x2 = 0;
for (i = 1; i <= sqr_lim; i++) {
x2 += 2 * i - 1;
y2 = 0;
for (j = 1; j <= sqr_lim; j++) {
y2 += 2 * j - 1;
n = 4 * x2 + y2;
if ((n <= limit) && (n % 12 == 1 || n % 12 == 5))
is_prime[n] = !is_prime[n];

// n = 3 * x2 + y2;
n -= x2; // Оптимизация
if ((n <= limit) && (n % 12 == 7))
is_prime[n] = !is_prime[n];

// n = 3 * x2 - y2;
n -= 2 * y2; // Оптимизация
if ((i > j) && (n <= limit) && (n % 12 == 11))
is_prime[n] = !is_prime[n];
}
}

// Отсеиваем квадраты простых чисел в интервале [5, sqrt(limit)].
// (основной этап не может их отсеять)
for (i = 5; i <= sqr_lim; i++) {
if (is_prime[i]) {
n = i * i;
for (j = n; j <= limit; j += n) {
is_prime[j] = false;
}
}
}

// Вывод списка простых чисел в консоль.

int primecount=0;
for (i = 2; i <= limit; i++) {
if (is_prime[i]) {
//printf(", %d", i);
primecount++;
}
}

int time2=time(NULL);

printf("\nAtkin 1.0 statistics :\n");
printf(" Interval : [2..%d]\n", limit);
printf(" Primes detected : %d\n", primecount);
printf(" Time elapsed : %d sec\n\n", time2-time1);

delete[] is_prime;
getch();
return 0;
}

вот програмка которая находит самое большое простое число до 1.000.000.000. хотелось бы находить до 10.000.000.000
. короче надо улучщить код или написать другую программу.
...
Рейтинг: 0 / 0
09.11.2011, 11:55
    #37517763
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
серегй,

Ну...
Код: plaintext
unsigned long long int limit = - 1 ;
...
Рейтинг: 0 / 0
09.11.2011, 12:25
    #37517853
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
серегй, там чуть ниже я где-то еще один исходник приаттачивал с поддержкой uint64 расчётов и
с быстрой целочисленной функцией sqrt без использования double типов.
...
Рейтинг: 0 / 0
09.11.2011, 13:11
    #37518015
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
ShSergeА вообще, какое самое большое число, которое можно получить на компьютере? насчет "получить" не знаю, но "написать" на компьютере наверное можно любое большое число, для которого существует методика описания и символы описания ;)

серегйвот програмка которая находит самое большое простое число до 1.000.000.000. хотелось бы находить до 10.000.000.000
. короче надо улучщить код или написать другую программу.напиши, мы не против :)
...
Рейтинг: 0 / 0
09.11.2011, 17:10
    #37518722
mccc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
серегй,
шутки ради, вычислял методом Эратосфена, в пределах 32 бит, на асм,
- 8 часов, результат в массиве 813120880 бт.
...
Рейтинг: 0 / 0
09.11.2011, 17:12
    #37518725
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Тогда уж лучше мой PBFA. Хотя-бы память не так жрёт.
...
Рейтинг: 0 / 0
10.11.2011, 14:45
    #37520035
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
maytonсерегй, там чуть ниже я где-то еще один исходник приаттачивал с поддержкой uint64 расчётов и
с быстрой целочисленной функцией sqrt без использования double типов.
unsigned int isqrt32(unsigned int x)
{
unsigned int x1;
int s, g0, g1;
if (x <= 1) return x;
s = 1;
x1 = x - 1;
if (x1 > 65535) { s+=8; x1>>=16;}
if (x1 > 255) { s+=4; x1>>=8;}
if (x1 > 15) { s+=2; x1>>=4;}
if (x1 > 3) { s+=1; }
g0 = 1<<s;

g1 = (g0 + (x >> s)) >> 1;
while(g1 < g0)
{
g0 = g1;
g1 = (g0 + (x/g0)) >> 1;
}
return g0;
}

вот этот да?
куда его вставить?
...
Рейтинг: 0 / 0
10.11.2011, 14:49
    #37520055
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Ну кагбе вместо квадратного корня. Ты определись с разрядностью. Этот сорс заточен только под UINT32.

Если ты используешь UINT64 (возм. long) то имплементацию надо будет переделать. Это, если
мне не изменяет память метод Ньютона. Оригинал я возможно брал из книги Генри Уоррена
- Алгоритмические трюки.
...
Рейтинг: 0 / 0
10.11.2011, 14:57
    #37520083
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Abstractionсерегй,

Ну...
Код: plaintext
unsigned long long int limit = - 1 ;

как это? и почему -1?
...
Рейтинг: 0 / 0
10.11.2011, 15:06
    #37520112
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Фокус такой (с) Госпожа Беладонна.

Отрицательное signed (-1) похоже на максимальное unsigned.
...
Рейтинг: 0 / 0
10.11.2011, 15:45
    #37520227
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
maytonФокус такой (с) Госпожа Беладонна.

Отрицательное signed (-1) похоже на максимальное unsigned.
так signet long long int limit=-1 или как?
#include<limits.h>
...
Рейтинг: 0 / 0
10.11.2011, 15:52
    #37520243
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
Я не помню точно какую разрядность имеет unsigned long long. Если 64 бит то ULLONG_MAX.
Если 32 бит то ULONG_MAX.
...
Рейтинг: 0 / 0
10.11.2011, 16:12
    #37520296
серегй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
maytonНу кагбе вместо квадратного корня. Ты определись с разрядностью. Этот сорс заточен только под UINT32.

Если ты используешь UINT64 (возм. long) то имплементацию надо будет переделать. Это, если
мне не изменяет память метод Ньютона. Оригинал я возможно брал из книги Генри Уоррена
- Алгоритмические трюки.

пока подумаю как это сделать...
...
Рейтинг: 0 / 0
10.11.2011, 16:21
    #37520317
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
А что там думать? Правишь типы данных.

Секции if (x< - по аналогии расширяешь до удвоенной разрядной сетки.
На самом деле они не влияют на точность резульатата. Только на скорость расчётов
т.к. это выбор начального приближения.

Самое главное - прогони краевой модульный тест с заранее расчитанными
точными целыми корнями и всё ОК.
...
Рейтинг: 0 / 0
10.11.2011, 19:34
    #37520767
AHTOH_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"самое большое простое число", которое можно найти на обычной пк.
По моему ограничение только во времени которое будет затрачено на поиск числа.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / "самое большое простое число", которое можно найти на обычной пк. / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]