Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2012, 12:41   #1
Servelat
 
Регистрация: 22.11.2012
Сообщений: 4
По умолчанию Overflow exception

Код:
bool[] isPrimArr = new bool[9876543211];
Ругается на эту строчку. Что с ней не так?

Полный код
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;



namespace Application
{
   class vseznachnoechislo
    {

        protected bool distinctnumb(Int64 number)
       {
           Int64 distlenght;
           Int64 lenght;
           string s1 = number.ToString();
           Int64[] massiv = new Int64[s1.Length];
            for (int i = 0; i < s1.Length; i++) { 
             massiv[i] = s1[i];
            }
                
            Array.Sort(massiv);
            Array.Reverse(massiv);

            

           
           distlenght = number.ToString().Distinct().Count();
           lenght = number.ToString().Count();
           if (distlenght == lenght&&massiv[0]==s1.Length)
           {
               return true;
           }
           else

               return false;
       }
        /*	private Int64 showmemaximum()
            {	
                Int64 res;
                string s1;
                string s = "";

                massiv = new Int64[ncount];
			
         *       for(Int64 i = 0; i < ncount; i++)
                {
                    massiv[i] = i+1;
                }


                Array.Sort(massiv);
                Array.Reverse(massiv);
                for(Int64 i = 0; i < ncount;i++)
                {
                s1 = massiv[i].ToString();
                    s+=s1;
                }
                res = Int64.Parse(s);
                return res;
            }

            public Int64 max()
            {
                Int64 res;
                res  = showmemax();
                return res;
            }*/




    }
   class Prime : vseznachnoechislo
    {
        
        public Int64 GetMaxDistinctPrimNumbersAtkin(Int64 num)
        {
            vseznachnoechislo chislo = new vseznachnoechislo();
            
            bool[] isPrimArr = new bool[9876543211];// Инициализация числового ряда
            double sqrt = Math.Sqrt(num);
            List<Int64> retList = new List<Int64>(); //Инициализация списка, простых чисел
            Int64 n = 0;
            
                retList.Add(2);//2 и 3 сразу вносятся в список
                retList.Add(3);
           
            /*построение прямого произведения для всех чисел x и y
            от еденицы до квадратного корня из num */
            for (Int64 x = 1; x <= sqrt; x++)
                for (Int64 y = 1; y <= sqrt; y++)
                {
                    n = 4 * x * x + y * y;
                    /* Здесь инвертируются решения для вышестоящего уравнения */
                    if (((n % 12 == 1) || (n % 12 == 5)) && (n <= num)) isPrimArr[n] = !isPrimArr[n];

                    n = 3 * x * x + y * y;
                    if ((n % 12 == 7) && (n <= num)) isPrimArr[n] = !isPrimArr[n];

                    n = 3 * x * x - y * y;
                    if ((x > y) && (n % 12 == 11) && (n <= num)) isPrimArr[n] = !isPrimArr[n];
                }
            //теперь зачеркиваются все квадраты простых чисел и кратные им числа:
            for (Int64 i = 5; i <= sqrt; i++)
                if (isPrimArr[i])
                    for (Int64 k = 1; k * i * i <= num; k++)
                    {
                        isPrimArr[k * i * i] = false;
                    }
            
            
            //Возвращаться список простых чисел:
            for (Int64 i = 5; i <= num; i++)
            {  
                if ((isPrimArr[i])&&(distinctnumb(i)))
            {   
                retList.Add(i);
                Console.WriteLine("Naideno prostih vseznachnih chisel {0}",retList.Count);
            }
            }
            Int64 max = retList.Max();
            return max;
        }   
    }

   

    
	class MainClass
	{
		public static void Main (string[] args)
        {
            Int64 num = 9876543210;
            Prime prime = new Prime();
            Stopwatch stopwatch = new Stopwatch();
            Console.WriteLine("Wait................");
            stopwatch.Start();
			Console.WriteLine("{0}",prime.GetMaxDistinctPrimNumbersAtkin(num));
            stopwatch.Stop();
            Console.WriteLine("{0}", stopwatch.Elapsed.ToString());
            Console.ReadLine();
		}
	}
}
Servelat вне форума Ответить с цитированием
Старый 22.11.2012, 12:50   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Ругается на эту строчку. Что с ней не так?
А сами как думаете? Кто-то хотеть кушать слишком много памяти.
Abstraction вне форума Ответить с цитированием
Старый 22.11.2012, 12:52   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А зачем Вам столько булов ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 22.11.2012, 12:56   #4
Servelat
 
Регистрация: 22.11.2012
Сообщений: 4
По умолчанию

чтобы воспользоваться решетом аткина))) а не лучше будет мне воспользоваться BitArray?
UPD это только в яве туда можно писать бесконечно много не лучше(

Последний раз редактировалось Servelat; 22.11.2012 в 13:11.
Servelat вне форума Ответить с цитированием
Старый 22.11.2012, 13:04   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Мне показалось, или Вы считаете количество простых чисел, содержащих все цифры от 0 до 9 по одному разу?
Abstraction вне форума Ответить с цитированием
Старый 22.11.2012, 13:08   #6
Servelat
 
Регистрация: 22.11.2012
Сообщений: 4
По умолчанию

да, алгоритм в принципе готов, и работает, но у меня нет опыта работы с большими значениями. и вот тут возникает загвоздка с массивом bool;
Servelat вне форума Ответить с цитированием
Старый 22.11.2012, 13:11   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
да, алгоритм в принципе готов, и работает, но у меня нет опыта работы с большими значениями. и вот тут возникает загвоздка с массивом bool;
Мой алгоритм, для сравнения:
Код:
Console.WriteLine("Не существует простых всезначных чисел.");
Abstraction вне форума Ответить с цитированием
Старый 22.11.2012, 13:17   #8
Servelat
 
Регистрация: 22.11.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Мой алгоритм, для сравнения:
Код:
Console.WriteLine("Не существует простых всезначных чисел.");
Ну тогда нужно проверять делимость на 3 дополнительно.

Эмм. Тогда доказательство в студию.

Последний раз редактировалось Servelat; 22.11.2012 в 13:22.
Servelat вне форума Ответить с цитированием
Старый 22.11.2012, 13:23   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Servelat

bool[] isPrimArr = new bool[9876543211];

Ругается на эту строчку. Что с ней не так?


в этой строчке все правильно, просто в твоем распоряжении нет компа с 10 гигами памяти.
Rififi вне форума Ответить с цитированием
Старый 22.11.2012, 13:27   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Храни основной массив на диске. Грузи небольшой дамп кратный 4кб и обрабатывай его. В вики об этом кстати тоже написано, есть и рекомендация по размеру блока.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 22.11.2012 в 13:32.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stack overflow в СИ Sergey_Black Помощь студентам 3 28.01.2012 00:52
Ошибка Overflow Platon33 Microsoft Office Excel 5 23.12.2011 02:25
Процедура выдает ошибку arithmetic exception numeric overflow or string truncation postaveche БД в Delphi 8 09.09.2010 13:20
Stack overflow GaLiof Помощь студентам 7 12.12.2009 12:56
Stack OverFlow Tanya2008 Общие вопросы Delphi 6 11.05.2009 15:16