Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > помогите переделать С++ в СИ |
Автор: Splendid 18.8.2008, 11:21 | ||
Нужно переделать этот код в Си, помогите, пожалуйста...
|
Автор: W4FhLF 18.8.2008, 11:30 |
Для этого кода невозможно получить полноценный аналог на С, т.к. в нём нет шаблонов и понятия обобщённого программирования (вариант с кучей макросов не рассматриваю). В коде активно используются контейнеры, алгоритмы и итераторы STL. Их можно заменить реализовав всё вручную. Поэтому я очень сомневаюсь, что здесь кто-то будет переделывать за тебя всё это. Задавай более конкретные вопросы. |
Автор: Splendid 20.8.2008, 11:38 | ||||
вот более конкретный вопрос: Как полученные этим кодом:
простые числа - т.е. последовательость a[i], передать в цикл.... Пробую так дописать - фигня получается:
а нужно, чтобы цикл брал все ненулевые a[i] (т.е. все простые числа) по порядку и делил n на каждое из них, и если все остатки не равны нулю - то выводил бы - It is possibly a prime number |
Автор: NoliX 20.8.2008, 12:58 | ||||||||
Я так понимаю, что требуется проверить, является ли число простым В данном случае написан код - решето Эратосфена для первых 256 чисел Если требуется проверить, является ли число, N<256 простым то достаточно ввести проверку
Потому что по алгоритму мы вычеркивали все составные числа из нашего массива Если требуется проверить, является ли число, 256<N<66049 (это 257*257) простым то придется действительно делить но все простые числа меньше 256 для нужно исправить
на
хотя вместо i<(n/2) правильно писать i<sqrt(n) (квадратный корень) И вообще такой алгоритм проверки крайне тредоемок на подготовительном уровне, это целесообразно делать, если нужно проверить миилионы чисел. а ради одного числа составлять решено не хорошо, плюс массив не динамический. памяти жрет ненужное количество логичнее в этом случае я думаю сделать так
|
Автор: Splendid 20.8.2008, 13:18 | ||
в алгоритме нужно заданное число методом тривиального деления проверить на простоту, для этого решетом Эратосфена вычисляются все простые числа до 256 - я так понимаю, что это оптимальная проверка, отсекает все четные и 80% нечетных составных чисел, а потом заданное число поделить на все эти полученные простые....я переписала этот цикл так:
вроде работает....это правильно? |
Автор: NoliX 20.8.2008, 14:01 | ||
Вы меня не читаете (слушаете) я уже написал, что нужно написать вот так:
В Вашем коде Вам, может быть, придется делить на заведомо большие проверяемого числа числа, например не нужно делить 5 на 33, и так понятно, что 5 больше чем на 3 не поделится (а это 5/2+1) А по поводу, что не гарантирует правильности результата - это я конечно чушь спорол, ошибка будет только после 66049 |
Автор: Splendid 20.8.2008, 15:02 |
NoliX, спасибо! Я все поняла!!! Тему можно закрыть![]() |
Автор: virtul 2.9.2008, 10:47 |
Модератор: Сообщение скрыто. |