[C#] 소수구하기

C#으로 소수구하기 연습을 해보았다. 문제 자체는 간단한데 코딩도장으로 하는데 왜 어리버리 되었는지..
회사에서 연습으로 풀어본 문제이고, 그때는 어리버리해서 마무리 못하였고, 집에와서 끄적대보았다.
문법만 c# 스럽게 되었을뿐, 코드 자체는 수정할 것도 보이고, c++스러운것도 보이고.. 휴...ㅠ.ㅠ
using System;
using System.Collections;

namespace c_sharp_problem_prime_number
{
    class PrimeNumber
    {
        static void Main(string[] args)
        {
            PrimeNumberSolve primeNumbers = new PrimeNumberSolve();

            primeNumbers.SetNumber(1, 50);
            primeNumbers.CalculatePrimeNumbers();
            primeNumbers.PrintPrimeNumbers();
        }
    }

    class PrimeNumberSolve
    {
        public PrimeNumberSolve()
        {
            _startNumber = 0;
            _endNumber = 0;

            _resultPrimeNumberList = new ArrayList();
            _primeNumberList = new ArrayList();
        }

        public void SetNumber( int numA, int numB )
        {
            _startNumber = Math.Min(numA, numB);
            _endNumber = Math.Max(numA, numB);         
        }

        public bool IsPrimeNumber( int number )
        {
            if (number < 2)
            {
                return false;
            }

            for (int i = 2; i < number; i++)
            {
                if (number % i == 0)
                {
                    return false;
                }
            }

            return true;
        }

        public void CalculatePrimeNumbers()
        {
            PreCalculatePrimeNumbers();

            for (int num = _startNumber; num <= _endNumber; num++)
            {
                bool isPrimeNum = true;
                if (_primeNumberList.Count > 0 )
                {
                    foreach (int i in _primeNumberList)
                    {
                        if (num % i == 0)
                        {
                            isPrimeNum = false;
                        }
                    }                                 
                }
                else
                {
                    isPrimeNum = IsPrimeNumber(num);                    
                }

                if (isPrimeNum == true)
                {
                    _primeNumberList.Add(num);
                    _resultPrimeNumberList.Add(num);
                } 
            }
        }

        public void PreCalculatePrimeNumbers()
        {
            for( int i = 2; i < _startNumber; i++ )
            {
                bool isPrimeNumber = IsPrimeNumber(i);
                if( isPrimeNumber == true )
                {
                    _primeNumberList.Add(i);
                }
            }
        }

        public void PrintPrimeNumbers()
        {
            foreach( int number in _resultPrimeNumberList )
            {
                Console.WriteLine( number );
            }
        }

        private ArrayList _resultPrimeNumberList;
        private ArrayList _primeNumberList;
        private int _startNumber;
        private int _endNumber;
    }    
}

'프로그래밍' 카테고리의 다른 글

C# - Property  (0) 2009.12.24
Python - Beautiful Soup  (2) 2009.12.24
SCJP 5.0 관련 자료 모음  (0) 2009.12.24
Compiler - Introduce  (0) 2009.12.24
코딩도장(CodingDojo)  (0) 2009.12.24