powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Программа с простыми числами с использованием LINQ
6 сообщений из 6, страница 1 из 1
Программа с простыми числами с использованием LINQ
    #36804877
rfl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rfl
Гость
Подскажите, если кто знает. Программа для вывода простых чисел в заданном промежутке от a до b. Почему простые числа выводятся только на промежутке от 2 до какого-либо числа b. А если выводишь с консоли какое-либо начальное значение больше 2 программа не работает (простые числа не выводятся).

Код: plaintext
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.
44.
45.
46.
47.
48.
49.
50.
51.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleNumber
{
    class Program
    {
        static void Main()
        {
            first:
                int n = 0, a = 0, b = 0;
            try
            {
                Console.Write("Введите размерность массива: ");
                n = Convert.ToInt32(Console.ReadLine());
                Console.Write("\nВведите начальное значение: ");
                a = Convert.ToInt32(Console.ReadLine());
                Console.Write("Введите конечное значение: ");
                b = Convert.ToInt32(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("Не верный формат введеных данных");
                goto first;
            }
            Console.WriteLine();
            int[] mass = new int[n];
            for (int i = a; i <= b; i++)
                mass[i] = i;
            Console.WriteLine("Выбранный диапазон чисел от {0} до {1} ", a, b);
            Console.WriteLine();
            for (int i = a; i <= b; i++)
                Console.Write("{0} ", mass[i]);
            Console.ReadLine();
            Console.WriteLine();
            //----------------------------------------------------------------------------------------------//

            Func<int, IEnumerable<int>> primeNumbers = max =>
     from i in Enumerable.Range(a, max - 1)
     where Enumerable.Range(a, i - 2).All(j => i % j != 0)
     select i;
            IEnumerable<int> result = primeNumbers(b);
            foreach (int i in result)
            {
                Console.Write("{0} ", i);
            }
            Console.ReadKey(); 
        }
    }
}
...
Рейтинг: 0 / 0
Программа с простыми числами с использованием LINQ
    #36805357
VitaliyBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rfl,

Это откуда такое??? Приведенный код вообще неработоспособен.
...
Рейтинг: 0 / 0
Программа с простыми числами с использованием LINQ
    #36805742
stimpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rflПочему простые числа выводятся только на промежутке от 2 до какого-либо числа b. А если выводишь с консоли какое-либо начальное значение больше 2 программа не работает (простые числа не выводятся).


Все очень просто, у Вас код неправильный.

Советую почтитать про Решето Эратосфена
...
Рейтинг: 0 / 0
Программа с простыми числами с использованием LINQ
    #36806300
rfl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rfl
Гость
VitaliyBorisrfl,

Это откуда такое??? Приведенный код вообще неработоспособен.
Код работает. Компилировал в Microsoft Visual Studio 2008. Но простые числа выводятся если выбираешь диапазон от 2. Если выбираешь от 3 и выше, выводятся просто диапазон выбранных значений. Простые числа не выводятся.
...
Рейтинг: 0 / 0
Программа с простыми числами с использованием LINQ
    #36806337
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rflКод работает.
конечно, код неправильный... если делать в лоб, "неумно", то код будет выглядеть примерно так:

Func<int, IEnumerable<int>> primeNumbers = max =>
from i in Enumerable.Range(a, max - a + 1)
where Enumerable.Range(2, i - a).All(j => i % j != 0)
select i;

но не составит труда нагуглить более "умные" решения (проверять лишь нечетные и 2, и т.п.)
...
Рейтинг: 0 / 0
Программа с простыми числами с использованием LINQ
    #36812977
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может не в тему, однако... просматривал вскользь доку о Parallel LINQ (PLINQ) в FW4, опробовал на этом примере (4-ядерный серверок).
PLINQ отработал в три раза быстрее!
PLINQ загрузил все четыре почти на 100% (против 25% - LINQ)

и, главное, модификация кода запроса вылилась аж в

Func<int, IEnumerable<int>> primeNumbers = max =>
from i in Enumerable.Range(a, max - a + 1) .AsParallel()
where Enumerable.Range(2, i - a).All(j => i % j != 0)
select i;

(нифигасебедумалясебе, ну мокрософты дают!)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Программа с простыми числами с использованием LINQ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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