■ 소수(Prime Number) 열거하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


PrimeNumberGenerator.cs

 

 

using System;

using System.Collections;

using System.Collections.Generic;

 

namespace TestProject

{

    /// <summary>

    /// 소수 생성자

    /// </summary>

    public class PrimeNumberGenerator : IEnumerable<long>

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 열거자 구하기 - GetEnumerator()

 

        /// <summary>

        /// 열거자 구하기

        /// </summary>

        /// <returns>열거자</returns>

        public IEnumerator<long> GetEnumerator()

        {

            yield return 2;

 

            for(long i = 3; ; i += 2)

            {

                if(IsOddPrime(i))

                {

                    yield return i;

                }

            }

        }

 

        #endregion

        #region 열거자 구하기 - IEnumerable.GetEnumerator()

 

        /// <summary>

        /// 열거자 구하기

        /// </summary>

        /// <returns>열거자</returns>

        IEnumerator IEnumerable.GetEnumerator()

        {

            return GetEnumerator();

        }

 

        #endregion

 

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region 홀수 소수 여부 구하기 - IsOddPrime(value)

 

        /// <summary>

        /// 홀수 소수 여부 구하기

        /// </summary>

        /// <param name="value"></param>

        /// <returns>홀수 소수 여부</returns>

        private bool IsOddPrime(long value)

        {

            long sqrt = (long)Math.Sqrt(value);

 

            for(long i = 3; i <= sqrt; i += 2)

            {

                if(value % i == 0)

                {

                    return false;

                }

            }

 

            return true;

        }

 

        #endregion

    }

}

 

 

MainForm.cs

 

 

using System;

using System.Text;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            #region 이벤트를 설정한다.

 

            this.calculateButton.Click += calculateButton_Click;

 

            #endregion

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 계산하기 버튼 클릭시 처리하기 - calculateButton_Click(sender, e)

 

        /// <summary>

        /// 계산하기 버튼 클릭시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void calculateButton_Click(object sender, EventArgs e)

        {

            long maximumPrimeNumber = long.Parse(this.maximumPrimeNumberTextBox.Text);

 

            StringBuilder stringBuilder = new StringBuilder();

 

            PrimeNumberGenerator generator = new PrimeNumberGenerator();

 

            foreach(long primeNumber in generator)

            {

                if(primeNumber > maximumPrimeNumber)

                {

                    break;

                }

 

                stringBuilder.Append(primeNumber.ToString() + " ");

            }

 

            string text = stringBuilder.ToString();

 

            this.primeNumberListTextBox.Text = text.Substring(0, text.Length - 1);

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요