![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 10.10.2009
Сообщений: 680
|
![]()
rrrFer, такое решение подходит для пользователя, у которого даже нету оф.компилятора паскаля (стоит турбо, как я понимаю), и его даже реально ужать в 1 секунду)) И в самом деле, я не подумал, что можно отсеять неудобные числа до проверки на простоту)
Может быть, что чисел всего 100, так как те, у которых нету "цифр в порядке возростания", а всего одна цифра (таких 5), отброшены. |
![]() |
![]() |
![]() |
#12 |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
![]()
да, можно ужать. Тут много времени занимает работа с потоком
кстати была ошибка, никто не заметил, вот правильнее: Код:
|
![]() |
![]() |
![]() |
#13 | |
Пользователь
Регистрация: 22.10.2010
Сообщений: 12
|
![]() Цитата:
filchar (a,sizeof(a),1); q:=round(sqrt(n)); for i:=2 to q do if a[i] then begin j:=i*i; while j<=n do begin a[j]:=false; j:=j+i; end; end; програма работает быстро даже для больших чисел, я согласен с вами что переменная может принимать большие числа если она к примеру longint но в моём случае для этой програмы нужен длинный массив a:array[1..23456789] of longint; - чего просто не может быть; или a:array[1..23456789] of boolean; - чего также не может быть; Ну и что делать? Да и чуть не забыл, спасибо за листинг программы который вы мне привели, но дело в том, что я ещё в турбо паскале не разобрался какой мне нафиг с++ так что,пожалуйсто, по возможности перевидите её, если можно на паскаль или на русском языке ,что делали хоть напишите. |
|
![]() |
![]() |
![]() |
#14 | |
Участник клуба
Регистрация: 29.12.2009
Сообщений: 1,166
|
![]() Цитата:
з.ы. ппц пошли "олимпиадники"
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть] |
|
![]() |
![]() |
![]() |
#15 |
Пользователь
Регистрация: 22.10.2010
Сообщений: 12
|
![]()
Я вообще не понимаю к чему вы это написали, это вам не чат , где бы я с вами спокойно мог вступить в спор, я просто не ради этого сюда захожу , я захожу чтоб на предложения посмотреть , а не чтобы вступать в полемику с теми кто помочь не может и мусор всякий пишет.
|
![]() |
![]() |
![]() |
#16 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 18
|
![]() ![]() Мне тоже приходилось отсеивать числа с пмощью Эратосфена. Алгоритм filchar (a,sizeof(a),1); q:=round(sqrt(n)); for i:=2 to q do if a[i] then begin j:=i*i; while j<=n do begin a[j]:=false; j:=j+i; end; выложен в википедии. Я его малость подкуртил под себя.Под динамический массив и чтение из файла.Вот,вуаля,пользуйтесь.На Си был,вот паскаль. program eratosphen; {$APPTYPE CONSOLE} uses SysUtils; type MyArray=Array of LongBool; var a:MyArray; m,n:Longword; i,j,t:Longword; t1,t2:Text; begin assign(t1,'input.txt'); reset(t1); assign(t2,'output.txt'); rewrite(t2); read(t1,m,n); if n=0 then begin if (m div m=1) and (m mod 2<>0) then write(t2,m); end; SetLength(a,n); //for i:=0 to n-1 do //a[i]:=not a[i]; //FillChar(a,sizeof(a),1); t:=round(sqrt(n)); for i:=2 to t do {if A[i] then} begin j:=i*i; while j<=n do begin A[j]:=true; j:=j+i; end; end; for i:=m to n do if a[i]=false then write(t2,i,' '); close(t1); close(t2); halt(0); end. Проблема в другом,при диапозоне 2..2147483647 вылетает с ошибкой.Не считает. Но ваше число он берет 23456789. Для длинных чисел нужно реализовывать длинную арифметику,с которой мне возиться не хочется.
Дорога возникает только под шагами идущего...
|
![]() |
![]() |
![]() |
#17 |
Пользователь
Регистрация: 22.10.2010
Сообщений: 12
|
![]()
Дело в том что у меня turbo Pasca 7.1 а не Delphi там нет таких модулей как uses и библиотеки SysUtils там тоже нет. Поэтому MyArray=Array of LongBool записать так нельзя, можно так MyArray:Array [1..n] of LongBool; (так как компилятор делает проверку границ массива ) в связи с этим число n относительно маленькое (1000000 уже не проходит), а мне надо чтобы оно 23456789 равнялось(вот в чём проблема)
|
![]() |
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 18.08.2010
Сообщений: 140
|
![]()
А это доказанный факт?
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
|
![]() |
![]() |
![]() |
#19 |
Форумчанин
Регистрация: 18.08.2010
Сообщений: 140
|
![]()
pristizh, кстати, если Вам мало памяти - можно использовать файлы и динамические указатели. Технологии известны.
Код:
Люди бывают десяти типов: те, кто знают двоичную систему, и те, кто нет
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Простые числа. С++ | mephistophel | Помощь студентам | 3 | 03.02.2011 22:12 |
простые числа | Koko Shanel' | Помощь студентам | 2 | 08.09.2010 01:13 |
Простые числа | Verochka | Помощь студентам | 14 | 02.12.2008 20:30 |
Простые числа | werser | Помощь студентам | 8 | 18.06.2008 07:24 |