Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Нечотные числа


Автор: kurzon 3.11.2007, 01:39
Как проверить четное или нет число?
Делением на 2, или есть другой способ?
И как проверить число есть простым или нет? ( by http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE )
Может у кого есть отличный алгоритм?

Автор: kurzon 3.11.2007, 02:18
Код

 string str = this.t_Check.Text;
            string f="";
            int value = Convert.ToInt32(str);
            for(int i=2;i<=Math.Sqrt(value);i++) 
            {
               if (value / i == (int)value / i)
                {
                    f = "Ето не простое число";

                    break;
                }
               else f = "Ето простое число"; 


            }
            MessageBox.Show(f);

В чем тут ошибка?

Автор: Xenon 3.11.2007, 02:19
Код

int var = 2;
Console.WriteLine(var % 2 == 0 ? "Четное" : "Нечетное");                        


Код

static bool is_simple(int num)
{
    int divider = 1;
    if (num % 2 == 0) divider = 0;
    while ( (divider+=2) <= Math.Floor(Math.Sqrt(num)) )
        if (num % divider == 0) return false;
    return true;

}

Автор: kurzon 3.11.2007, 02:32
Пачиму кагда когда я вожу 1 либо 58, мене виводит true.
1 и 58 есть не простые числа, а оно пишет что простые.

  
Код

static bool is_simple(int value,out bool bom)
        {
         
            int divider = 1;
            if (value == 1) return bom = false;
            else
            {
                if (value % 2 == 0) divider = 0;
                while ((divider += 2) <= Math.Floor(Math.Sqrt(value)))
                    if ((value % divider == 0)) return bom = false;
                return bom = true;
            }
        }
        private void b_Check_Click(object sender, EventArgs e)
        {
            string str = this.t_Check.Text;
            int value = Convert.ToInt32(str);
            is_simple(value,out bom);
       
        }

Автор: Servena 3.11.2007, 14:22
Спробуй так:

Код

using System;
namespace Simple
{
    //Программа предполагает, что входное число больше 2.
    //Такие числа как 1, 2 - обрабатывай вручную.
    class Program
    {       
        static void Main(string[] args)
        {
            int value=11; //Число(входной параметр) - меняй его чтобы попробовать разные числа            

            //Идея - в цикле пытаемся разделить value на все числа кроме 1 и самого value.
            //Если оно разделится без остатка - значит оно "Непростое".
            for(int i=2; i<value;i++)
                if (Convert.ToDouble(value) % i == 0)
                {
                    Console.WriteLine("Непростое");
                    Console.ReadLine();
                    return;
                }
            Console.WriteLine("Простое");            
            Console.ReadLine();
        }
    }
}


В прикладі використовувався консольний проект.

Автор: Xenon 3.11.2007, 14:30
Да, про единицу я забыл, а вот с 58 у меня нормально.

Автор: Servena 3.11.2007, 14:36
Ксенон, у меня тоже проблемы с 58 в твоем алгоритме.

Добавлено через 5 минут и 15 секунд
Сори, беру свои слова обратно.

Автор: kurzon 3.11.2007, 14:50
Пажалуста памагите сделать:

Создайте в вашем классе частное поле(массив на 100000 элементов), которое будет содержать таблицу простых чисел, и конструктор, который будет ее инициализировать простыми числами. Первое простое число таблицы – 2. Все последующие числа необходимо сгенерировать, перебирая нечетные числа и проверяя, являются ли они простыми(делите число на те простые числа, которые уже есть в таблице и какие меньше корня из перевіряємого числа).

Автор: Servena 3.11.2007, 15:00
А тебе так будет интересно?
Может давай так: у тебе сейчас есть все кусочки, попробуй их сложить вместе и выкладывай.
А мы поможем их подправить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)