LINUX.ORG.RU

Простые числа C++

 ,


0

1

Мне требуется написать рекурсивную процедуру для вычисления простого числа по его номеру, но не могу придумать алгоритм для этого.

★★

Последнее исправление: Klymedy (всего исправлений: 1)

сходу можно так - функция получает на вход номер и простое число, вычисляет следующее простое число и передаёт в рекурсивный вызов это число и декрементированный номер. При номере равном 1 рекурсия завершается

Harald ★★★★★
()

Вас в Википедии забанили, мой юный друг?

Господи, до чего дошло.

И убери из тегов Си++, пожалуйста.

Twissel ★★★★★
()

в C++ нет простых чисел. они есть в математике, а найти их можно с помощью алгоритмов из теории алгоритмов. лопата дана, копайте, сударь. если не думается - прогуляйтесь, проветритесь

anonymous
()

И новый год, что вот-вот настанет....

Дядя, ты дурак?

рекурсивную процедуру для вычисления простого числа по его номеру,

Звиздец. Это даже не одна из задач тысячелетия...

ziemin ★★
()

Тут рекурсия не нужна. Нужен просто libcurl. Оформляешь POST запрос на linux.org.ru/forum/development с номером простого числа. Потом в цикле делаешь GET и парсишь ответ. Какая тут рекурсия?! Новый миллениум, облачные технологии, коллективный разум!

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Harald

ну и лох :)

Сделал мой вечер. Всегда бы Development был такой краткий.

Pavval ★★★★★
()

придумай итеративный, затем преобразуй в рекурсивный.

qulinxao ★★☆
()

Попей витамины, займись физическими упражнениями, больше времени проводи на открытом воздухе.

aedeph_ ★★
()

Всё элементарно.
Шаг 1. Напиши интерпретатор лиспа на С++.
Шаг 2. Напиши первое попавшееся решение которое придет в голову на лиспе.
Шаг 3. Ты получил решение использующее рекурсию, так как в лиспе даже, чтобы найти свою собственную жопу используют рекурсию. Profit!

Tark ★★
()

Мда, даже такое не осилить? Ну и студенты нынче пошли.

#include<iostream>
#include <vector>

int main()
{
	using namespace std;
	int n=2147395500;
	vector<bool> prime (n+1, true);
	prime[0] = prime[1] = false;
	for (int i=2; i*i<=n; ++i)
		if (prime[i])
			for (int j=i*i; j<=n; j+=i)
			{
				prime[j] = false;
			}
}
Мне не жалко, всё равно, вылетишь. Рекурсию из этого сам сделаешь, хотя это несколько уродливо будет.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Tark

Шаг 1. Напиши интерпретатор лиспа на С++.

Это неправильно. Что мешает написать интерпретатор лиспа на лиспе же?

Шаг 3. Ты получил решение использующее рекурсию, так как в лиспе даже, чтобы найти свою собственную жопу используют рекурсию. Profit!

Это тоже неправильно. Коммон лисп не ФП, в нём даже не стандартизована оптимизация хвостовой рекурсии.

yauzahvi
()
Ответ на: комментарий от peregrine

всё равно, вылетишь

Это вряд ли. Получит диплом и станет начальником тех, кто может написать такую прогу самостоятельно, будь уверен.

yauzahvi
()
Ответ на: комментарий от yauzahvi

Это неправильно. Что мешает написать интерпретатор лиспа на лиспе же?

Ничего, но условия задачи предполагают использование С++.

Это тоже неправильно. Коммон лисп не ФП, в нём даже не стандартизована оптимизация хвостовой рекурсии.

Отсутствие стандартизации не препятствие для реализации. На пистон вот вообще стандарта нет и ничего.

Tark ★★
()
Ответ на: комментарий от Tark

Ничего, но условия задачи предполагают использование С++.

Ты препод штоле? Любитель притянутых за ушы решений штоле, лишь бы они укладывались в учебный план штоле? С++ можно применить и более очевидным и гармоничным способом. Например написать на лиспе транслятор лиспопроги в с++ и скомпилировать.

Отсутствие стандартизации не препятствие для реализации.

Препятствие, если ты не школота.

На пистон вот вообще стандарта нет и ничего.

Ну поэтому его и пользуют исключительно Модераторы и равные им по интеллекту существа.

yauzahvi
()
Ответ на: комментарий от yauzahvi

Ты препод штоле? Любитель притянутых за ушы решений штоле, лишь бы они укладывались в учебный план штоле? С++ можно применить и более очевидным и гармоничным способом. Например написать на лиспе транслятор лиспопроги в с++ и скомпилировать.

Да, следующая пересдача по троллингу через неделю.

Tark ★★
()
Ответ на: комментарий от aedeph_

Попей витамины, займись физическими упражнениями, больше времени проводи на открытом воздухе.

Военком, перелогинься.

ioway
()
Ответ на: комментарий от yauzahvi

Я учился с такими, обычно их на первом курсе выгоняют.

peregrine ★★★★★
()
Ответ на: комментарий от Tark

в лиспе даже, чтобы найти свою собственную жопу, используют рекурсию

чтобы найти жопу, в лишпе используют CDR

Virtuos86 ★★★★★
()
Ответ на: комментарий от yauzahvi

Троллить нехорошо. Ты ужасен.

yauzahvi (15.12.2014 3:51:26)

Угу.

На пистон вот вообще стандарта нет и ничего.

Ну поэтому его и пользуют исключительно Модераторы и равные им по интеллекту существа.

yauzahvi (15.12.2014 3:39:49)

^_-

Virtuos86 ★★★★★
()
Ответ на: комментарий от yauzahvi

Это тоже неправильно. Коммон лисп не ФП, в нём даже не стандартизована оптимизация хвостовой рекурсии.

Pаз ты тролишь, то и я буду. Кто говорил о коммон лиспе?

Ну и большинство реализаций эту оптимизацию применяют.

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от peregrine

Мда, даже такое не осилить? Ну и студенты нынче пошли.

Осиль для начала сам - в коде ошибка. Скобочки к примеру из вики зато добавил...

anonymous
()
Ответ на: комментарий от CrazyAlex25

тест на простоту числа (https://ru.wikipedia.org/wiki/Тест_Миллера_—_Рабина)

У него сложность большая (если для каждого числа пускать), у обычного решета лучше, потом, что его можно слегка модифицировать и получить O(n).

mix_mix ★★★★★
()
Ответ на: комментарий от MKuznetsov

Но никто не предложил вариант, просто перебирать числа по порядку, проверяя является ли оно простым.

Jack_Vo ★★
() автор топика
Ответ на: комментарий от Jack_Vo

Можно воспользоваться тем, что число является простым, если оно не делится ни на одно из простых чисел меньше себя.

Рекурсивно перебирая числа по порядку строится список простых чисел, алгоритм завершается, когда список становится заданного размера.

urquan
()
Ответ на: комментарий от anonymous

Где? Мне чисто лень делать всё за ТСа, который даже в вики не заходит, но, вроде работает.

peregrine ★★★★★
()

Вот примерный рекурсивно алгоритм:

Состояние алгоритма будет отписываться величинами: P=[p(1) ,...,p(n)] - список уже найденных простых, i - индекс в массиве P, x - текущее рассматриваемое число.

Начальное состояние: {P=[], i = 1, x = 1}.

Переход от состояния {P, i, x} к следующему состоянию:

Если n равно искомому номеру простого, то вернуть p(n) и закончить.

Если i больше некоторого значения, зависящего от n (смотри гипотезы Крамера, Римана, Лежандра, и тп.) то перейти в состояние {P с добавленным x, 0, x+1}

Если x делится на p(i) перейти к состоянию {P, 0, x+1}

Если x не делится на p(i) перейти к состоянию {P, i+1, x}.

Все оптимизации для ясности опускаю, граничные условия тоже.

bogus_result
()
Ответ на: комментарий от Jack_Vo

я предложил, тсу осталось только со шкалы на с++ перевести и все.

anonymous
()
Ответ на: комментарий от bogus_result

перейти к состоянию

здравстуйте, это канал про рекурсию? как пропатчить перебор простых чисел до FSM?

anonymous
()
Ответ на: комментарий от peregrine

Я не плюсовик. А замечание было про абстрактную визуальную корявость кода.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Но вообще-то у тебя тоже как бы рекурсия не пахнет:-) та же итерации, только в профиль.

bogus_result
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.