простые числа c # - PullRequest
       12

простые числа c #

6 голосов
/ 20 мая 2009

Я новичок в C #. И я хотел бы запрограммировать что-то вроде отображения простых чисел в списке, если пользователь введет любое целое число в текстовое поле. (это означает, что если они напишут 10, то будут отображаться простые числа от 0-10 или 20 от 0-20 и т. д.).

Что я должен рассмотреть перед тем, как заняться программированием? Я знаю, что в интернете много примеров, но сначала я бы хотел узнать, что мне понадобится?

Спасибо за совет; -)

=== Спасибо, парни. Итак, вы предлагаете, чтобы это лучше было сделать сначала в консольном приложении? Я сделал пример «For Loop» с использованием консольного приложения, очень простой, но потом, когда я попытался сделать это в приложении Windows Form, я не уверен, как его реализовать. Я боюсь, что если я продолжу делать примеры в консоли, то мне будет трудно сделать это в приложениях Windows Form. Что ты думаешь?

====== Привет еще раз,

Мне нужна обратная связь с моим кодом:

        Console.WriteLine("Please enter your integer: ");
        long yourInteger;
        yourInteger = Int32.Parse(Console.ReadLine());

        //displaying the first prime number and comparing it to the given integer
        for (long i = 2; i <= yourInteger; i = i + 1)
        {
            //Controls i if its prime number or not
            if ((i % 2 != 0) || (i == 2))
            {
                Console.Write("{0} ", i);
            }

        }

Ответы [ 8 ]

11 голосов
/ 20 мая 2009

Ну, во-первых, я бы подумал о том, как найти простые числа, и напишу это в консольном приложении, которое читает строку, выполняет математику и записывает результаты (просто потому, что это самое простое, что вы можете сделать и охватывает ту же логику разбора и т. д., которая понадобится вам позже).

Если вы довольны генерацией простых чисел, посмотрите, как создавать winforms - как поместить список, текстовое поле и кнопку на форму; как обрабатывать событие щелчка (кнопки) и как читать из текстового поля и записывать значения в список. Ваш простой код должен быть вполне приемлемым, чтобы принимать «как есть» ...

Если у вас еще нет IDE, обратите внимание, что C # Express бесплатен и распространяется на все вышеперечисленное.

6 голосов
/ 20 мая 2009

Вам нужно знать:

  • Как читать пользовательский ввод из приложения Windows
  • Как генерировать простые числа в диапазоне
  • Как записать вывод так, как вы хотите

Я настоятельно рекомендую вам разделить эти задачи. После того, как каждый из них работает отдельно, вы можете собрать их вместе. (Марк предлагает написать консольное приложение для раздела простых чисел - это хорошее предложение, если вы еще не хотите заниматься модульным тестированием. Если вы использовали модульное тестирование на других языках, его довольно легко запустить и запустить с NUnit . Консольное приложение, безусловно, быстрее начнется.)

Теоретически, для потенциально длительной задачи (например, пользователь вводит 1000000 в качестве первого числа) обычно следует использовать фоновый поток, чтобы поддерживать отзывчивость пользовательского интерфейса. Однако я бы проигнорировал это для начала. Имейте в виду, что пока вы вычисляете простые числа, ваше приложение будет казаться «зависшим», но сначала запустите его. Если вы уверены в простой версии, вы можете посмотреть на BackgroundWorker и тому подобное, если вы чувствуете приключения.

4 голосов
/ 20 мая 2009

Я обсуждал создание простых чисел с помощью Сита Эратосфена в моем блоге здесь:

http://blogs.msdn.com/mpeck/archive/2009/03/03/Solving-Problems-in-CSharp-and-FSharp-Part-1.aspx

Код выглядит так ...

public IEnumerable<long> GetPrimes(int max)
{
    var nonprimes = new bool[max + 1];

    for (long i = 2; i <= max; i++)
    {
        if (nonprimes[i] == false)
        {
            for (var j = i * i; j <= max; j += i)
            {
                nonprimes[j] = true;
            }

            yield return i;
        }
    }
}

С помощью этого кода вы можете писать подобные заявления ...

var primes = SieveOfEratosthenes.GetPrimes(2000);

... чтобы получить число простых чисел до 2000.

Весь код можно найти на CodePlex по адресу http://FSharpCSharp.codeplex.com.

Код «как есть», поэтому вы должны посмотреть на него, чтобы определить, соответствует ли он вашим потребностям, нужно ли добавлять проверку ошибок и т. Д., Поэтому рассматривайте его как пример.

3 голосов
/ 20 мая 2009

Вот отличный «наивный» алгоритм простых чисел, который идеально подойдет для ваших нужд: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

1 голос
/ 22 ноября 2011
using System;
class demo
{
   static void Main()
   {
      int number;
      Console.WriteLine("Enter Number you Should be Checked Number is Prime or not Prime");
      number = Int32.Parse(Console.ReadLine());
      for(int i =2;i {
         if(number % i == 0)
         {
            Console.WriteLine("Entered number is not Prime");
            break;
         }
      }
      if(number % i !=0)
      {
         Console.WriteLine("Entered Number is Prime");
      }

      Console.ReadLine();
   }
}
1 голос
/ 17 ноября 2010

Недавно я писал процедуру для реализации Sieve Of Eratosthenes и наткнулся на эту тему. Просто для архивов, вот моя реализация:

    static List<int> GetPrimeNumbers(int maxNumber)
    {
        // seed the master list with 2
        var list = new List<int>() {2};

        // start at 3 and build the complete list
        var next = 3;
        while (next <= maxNumber)
        { 
            // since even numbers > 2 are never prime, ignore evens 
            if (next % 2 != 0) 
                list.Add(next);

            next++;
        }

        // create copy of list to avoid reindexing
        var primes = new List<int>(list);

        // index starts at 1 since the 2's were never removed
        for (int i = 1; i < list.Count; i++)
        {
            var multiplier = list[i];
            // FindAll Lambda removes duplicate processing
            list.FindAll(a => primes.Contains(a) && a > multiplier)
                .ForEach(a => primes.Remove(a * multiplier));
        }

        return primes;
    }

Вы всегда можете заполнить его цифрой «1, 2», если вам нужно 1 в списке простых чисел.

1 голос
/ 20 мая 2009

Вот ответ на редактирование:

Спасибо, ребята. Итак, вы предлагаете, чтобы это лучше было сделать сначала в консольном приложении? Я сделал пример «For Loop» с использованием консольного приложения, очень простой, но потом, когда я попытался сделать это в приложении Windows Form, я не уверен, как его реализовать. Я боюсь, что если я продолжу делать примеры в консоли, то мне будет трудно сделать это в приложениях Windows Form. Что ты думаешь?

Если вы хотите представить простые числа в виде приложения Windows Form, вам также необходимо разработать пользовательский интерфейс для него. Это немного излишне для решения такой маленькой проблемы. Самый простой дизайн, который вы можете сделать, это заполнить ListBox в вашей форме ( пример ).

Если вы действительно заинтересованы в изучении Windows Forms или WPF, для этого есть несколько ресурсов .

0 голосов
/ 24 апреля 2012

Ваш подход совершенно неверен. Простые числа являются абсолютными и никогда не изменится. Лучше всего заранее составить длинный список простых чисел. Затем придумайте алгоритм, чтобы быстро найти это число, чтобы определить, есть ли оно в списке. Тогда в вашем случае (поскольку вы хотите перечислить все в заданном диапазоне, просто сделайте это). Это решение будет намного быстрее, чем любой алгоритм поиска простых чисел, реализованный во время выполнения. Если введенное целое число больше вашего списка, вы всегда можете реализовать алгоритм, начиная с этой точки.

...