Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка большого нат. числа на простоту C#

53K
24 мая 2010 года
Sawans
17 / / 24.05.2010
Проверка большого нат. числа на простоту
Простое число это число которое делится только на само себя и на единицу. Большое число - например 16549875629787.
Я как понимаю число надо записывать в строковый массив, потом делить столбиком на все числа от 2 до введенного. При этом делать проверку на остаток от деления. Проблема заключается в реализации деления столбиком. Почитав несколько форумов, в том числе этот:http://forum.codenet.ru/showthread.php?threadid=27569, я примерно понял как должен выглядеть алгоритм, а вот с программной реализацией парюсь уже третий час и ничего хорошего написать не удалось:(.
Помогите пожалуйста!
8.4K
24 мая 2010 года
z0rch
275 / / 02.09.2008
во-первых, достаточно делить от двух до корня из этого числа, а во вторых, покажите ваше "ничего хорошего" :)
53K
25 мая 2010 года
Sawans
17 / / 24.05.2010
До половины делить и правда нужно, иначе я до следующего семестра буду тестить)
Код выложу вечером, с собой ноута пока нет.
53K
30 мая 2010 года
Sawans
17 / / 24.05.2010
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Семестровая_задача_5_деление_
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox3.Clear();
            char[] X1 = new char[textBox1.Text.Length];//Делимое
            char[] Y1 = new char[textBox2.Text.Length];//Делитель
            int[] X = new int[textBox1.Text.Length];
            int[] Y = new int[textBox2.Text.Length];
            int[] Z = new int[textBox1.Text.Length];//Результат
            int[] A = new int[textBox2.Text.Length+1];
            int p=0,k = 0;
            bool b = false;

            X1 = textBox1.Text.ToCharArray();
            Y1 = textBox2.Text.ToCharArray();

            for (int i = 0; i < textBox1.Text.Length; i++)
                X = Convert.ToInt32(X1)-48;
            for (int i = 0; i < textBox2.Text.Length; i++)
                Y = Convert.ToInt32(Y1)-48;

            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                for (int j = k; j < textBox2.Text.Length + p; j++)
                {
                    A[j] = X[j];
                }
                for (int j = textBox2.Text.Length; j > 0; j--)
                {
                    if (A[j] < Y[j])
                    {
                        if (j != 0)
                            if (A[j - 1] != 0)
                            {
                                A[j - 1] = A[j - 1] - 1;
                                A[j] = 10 + A[j] - Y[j];
                            }
                            else
                            {
                                //A[j - 1] = 9;  //Если равно нулю то ....
                                //if(A[j-2] != 0)
                                //A[j - 2] = A[j - 2] - 1;
                            }
                        else
                        {
                            p = 1; b = false;
                            k = textBox2.Text.Length;
                            break;
                        }
                    }
                    else
                        A[j] = A[j] - Y[j];

                    b = true; Z++; p = 0;
                }
                if (b == true)
                    for (int j = 0; j < textBox2.Text.Length; j++)
                        if (A[j] == 0)
                        {
                            p++;
                        }
                        else
                            break;
            }

            for (int i = 0; i < textBox1.Text.Length; i++)
                textBox3.Text += "" + Z;

        }
    }
}



Это просто деление без поиска простоты. На шаге "if (A[j] < Y[j])" пишет что индекс находится вне границ массива. Не могу понять почему(.

Уже исправил

Цитата:
int[] A = new int[textBox2.Text.Length]; //убрал +1
...
for (int j = textBox2.Text.Length - 1; j >= 0; j--) // добавил -1
{
if (A[j] < Y[j]) ...


хотя пока правильно не делит(

53K
30 мая 2010 года
Sawans
17 / / 24.05.2010
Полагаю что Z++ я поместил не туда, вот только куда надо.....
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог