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;
}
}
}
Проверка большого нат. числа на простоту C#
Простое число это число которое делится только на само себя и на единицу. Большое число - например 16549875629787.
Я как понимаю число надо записывать в строковый массив, потом делить столбиком на все числа от 2 до введенного. При этом делать проверку на остаток от деления. Проблема заключается в реализации деления столбиком. Почитав несколько форумов, в том числе этот:http://forum.codenet.ru/showthread.php?threadid=27569, я примерно понял как должен выглядеть алгоритм, а вот с программной реализацией парюсь уже третий час и ничего хорошего написать не удалось:(.
Помогите пожалуйста!
во-первых, достаточно делить от двух до корня из этого числа, а во вторых, покажите ваше "ничего хорошего" :)
Код выложу вечером, с собой ноута пока нет.
Код:
Это просто деление без поиска простоты. На шаге "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]) ...
...
for (int j = textBox2.Text.Length - 1; j >= 0; j--) // добавил -1
{
if (A[j] < Y[j]) ...
хотя пока правильно не делит(
Полагаю что Z++ я поместил не туда, вот только куда надо.....