문 제
M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.
입 력
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
3 16
출 력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
3
5
7
11
13
코 드
- n 보다 큰 제곱수가 나오기 전까지만 반복하면 된다!
예를 들어 (n = 1,000,000) 이라면 sqrt(n) 값 1000까지만 체크를 하면 된다! ‘에라토스테네스의 체’의 효율성!
using System;
using static System.Console;
using System.Linq;
using System.Text;
namespace Algorithm
{
class Program
{
static void Main(string[] args)
{
int[] input = ReadLine().Split(' ').Select(int.Parse).ToArray();
int m = int.Parse(input[0].ToString());
int n = int.Parse(input[1].ToString());
bool[] isPrime = Enumerable.Repeat(true, n + 1).ToArray();
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= n; i++)
{
if(isPrime[i] == false)
continue;
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
StringBuilder sb = new StringBuilder();
for (int i = m; i <= n; i++)
{
if(isPrime[i])
sb.AppendLine(i.ToString());
}
WriteLine(sb.ToString());
}
}
}
비교코드 - 1