Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Vlad0709
0 / 0 / 1
Регистрация: 02.04.2011
Сообщений: 8
#1

Реализовать заданный алгоритм решета Эратосфена - C#

05.03.2013, 19:55. Просмотров 530. Ответов 2
Метки нет (Все метки)

Ввод нечетное натуральное n.
Вывод всех нечетных, положительных, простых <=n.
алгоритм
1. Создаем массив A c ((n-1)/2) ячейками каждой из которых присвоено значения 1. Полагаем p=3.
2.Если p*p>n, вычисляем все числа 2*і+1 для которых значения i - ой ячейки равно 1 и останавливаемся, в противном
случае переходим К ШАГУ 3.
3.Если А с номером ((p-1)/2) равно 0, увеличиваем p на 2, и возвращаемся к шагу 2, в противном случае шаг 4.
4. Присваиваем новой переменной Т значения p*p, заменяем нулем значения ячейки массива А под номером ((Т-1)/2),
и увеличиваем Т на 2*p. Повторяем эти 2 шага до тех пор пока Т<n, заитем увеличиваем p на 2 и возвр. к шагу 2.








Вот что у меня вышло, но я уверен что здесь неправильно.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 int n,p,T ;
            do
            {
                Console.WriteLine("Введите нечетное число ");
                n = int.Parse(Console.ReadLine());
            } while (n % 2 == 0);
 
            int a = ((n-1)/2);
//--------------------------------------------------------
            Double[] V = new Double[a];
            for (int i = 0; i < a; i++)
            {
                V[i] = 2*i+1;
               // Console.Write(V[i]);
            }
            p = 3;
 
        label1: for (int i = 0; i < Math.Sqrt(a); i++)
              {
 
          if (p * p > n)
                {
                    if (V[i] == 1)
                    {
                        Console.WriteLine(V[2 * i + 1]);
                       
                    } break;
                }
                else
                    if (V[(p - 1) / 2] == 0)
                        p += 2;
 
            }
            
                T = p ^ 2;
                while (T >= n) 
            {
                V[(T - 1) / 2] = 0;
                T =+ 2 * p;
            }
          
                p+=2;
                goto label1;
помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 19:55
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Реализовать заданный алгоритм решета Эратосфена (C#):

Алгоритм Эратосфена
Help!!!! 1. Реализовать функцию нахождения всех простых чисел в диапазоне от...

Поиск 2х взаимнопростых чисел из решета Эратосфена
В общем столкнулся с задачкой. У меня есть Список простых числе от 1 до N ...

Алгоритм "Решето Эратосфена": Разработать метод для определения простого числа
Для решения задачи использовать массивы. Разработать: 1.Метод для определения...

Реализовать алгоритм Прима
Вот код using System; using System.Collections.Generic; using...

Реализовать алгоритм Флойда-Уоршалла
Здравствуйте. Я понимаю, что уже неоднократно разбирался алгоритм...

Реализовать алгоритм шифрования Хаффмана
2. Шифрование Хаффмана namespace System.Algorithm { public static class...

2
tezaurismosis
Администратор
Эксперт .NET
8261 / 3766 / 721
Регистрация: 17.04.2012
Сообщений: 8,443
Записей в блоге: 14
05.03.2013, 20:16 #2
1) Не используйте goto. Совсем. Иначе рано или поздно придёте к "спагетти-коду".
2) T = p ^ 2; в C# этот оператор означает "исключающее-ИЛИ", а вы, видимо, подразумевали его как возведение в степень. Используйте n*n или Math.Pow(n, pow)
3) Вставьте в своём сообщении код в тег [CSHARP], читать невозможно.
0
Vlad0709
0 / 0 / 1
Регистрация: 02.04.2011
Сообщений: 8
05.03.2013, 20:20  [ТС] #3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int n,p,T ;
do
{
Console.WriteLine("Введите нечетное число ");
n = int.Parse(Console.ReadLine());
} while (n % 2 == 0);
 
int a = ((n-1)/2);
//--------------------------------------------------------
Double[] V = new Double[a];
for (int i = 0; i < a; i++)
{
V[i] = 2*i+1;
// Console.Write(V[i]);
}
p = 3;
 
label1: for (int i = 0; i < Math.Sqrt(a); i++)
{
 
if (p * p > n)
{
if (V[i] == 1)
{
Console.WriteLine(V[2 * i + 1]);
 
} break;
}
else
if (V[(p - 1) / 2] == 0)
p += 2;
 
}
 
T = p * p;
while (T >= n) 
{
V[(T - 1) / 2] = 0;
T =+ 2 * p;
}
 
p+=2;
goto label1;
подскажите как написать цикл так, что бы избавится от goto?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2013, 20:20
Привет! Вот еще темы с решениями:

Реализовать алгоритм симплекс-метода
Дана система линейных уравнений (СЛУ). Реализовать алгоритм симплекс-метода....

Не могу реализовать алгоритм с FileStream
Здравствуйте. Не могу реализовать алгоритм с помощью чтения из файла...

Реализовать алгоритм вычисления значения функции F(n)
Алгоритм вычисления значения функции F(n),где n– натуральное число, задан...

Как реализовать алгоритм шифрования md5
Здравствуйте, подскажите пожалуйста, как реализовать алгоритм md, который на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru