[C#] 백준 1929번 : 에라토스테네스의 체 방식(빠르게 소수 찾기)

2023. 1. 15. 23:17·언어/C#
728x90
using System;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        StringBuilder sb = new StringBuilder();
        string[] s = Console.ReadLine().Split();
        int M = int.Parse(s[0]);
        int N = int.Parse(s[1]);
        bool OK = true;

        if (M == 1) M++;
        for (int i = M; i < N; i++)
        {
            OK = true;
            for (int j = 2; j <= i; j++)
            {
                if (i != j && i % j == 0)
                {
                    OK = false;
                    break;
                }
            }
            if (OK)
                sb.AppendLine(i.ToString());
        }

        Console.Write(sb);
    }
}

 

이렇게 했는데 안됐다... 에라토스테네스의 체 방식을 사용해야한다고 한다. 그게 뭔지 몰라서 찾아봤다.

 

using System;

class Program
{
    static void Main(string[] args)
    {
        string[] s = Console.ReadLine().Split();
        int M = int.Parse(s[0]);
        int N = int.Parse(s[1]);

        bool[] arr = new bool[N + 1];

        for (int i = 2; i < N + 1; i++)
            arr[i] = true;

        for (int i = 2; i <= N; i++)
        {
            if (arr[i])
            {
                for (int j = i * 2; j <= N; j += i)
                    arr[j] = false;
            }
        }
        for (int i = M; i <= N; i++)
            if (arr[i])
                Console.WriteLine(i);
    }
}

 

소수를 찾아 그 수의 배수는 모두 소수가 아니라는 처리를 해주는 방식이었다. 근데 이 답으로 해도 문제는 오답이었다...

 

using System;
using System.Text;

class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder();
        string[] s = Console.ReadLine().Split();
        int N = int.Parse(s[0]);
        int M = int.Parse(s[1]);
        
        bool OK = true;
        if (N == 1)
        n++;
        
        for (int i = N; i <= M; i++)
        {
            OK = true;
            for (int j = 2; j * j <= i; j++)
            {
                if (i != j && i % j == 0)
                {
                    OK = false;
                    break;
                }
            }
            if (OK)
            {
                sb.AppendLine(i.ToString());
            }
        }
        Console.Write(sb);
    }
}

 

구글링한 이 답은 또 정답이다... 처음이랑 뭐가 다른지...

728x90

'언어 > C#' 카테고리의 다른 글

[C#] SortedSet 중복 없는 배열 생성  (0) 2023.07.25
[C#] 백준 10989번 : StreamReader  (0) 2023.01.18
[C#] 백준 2581번  (0) 2023.01.14
[C#] 백준 10757번 : 큰 수를 다룰 땐 BigInteger를 활용하자  (0) 2023.01.12
[C#] 백준 2839번  (0) 2023.01.12
'언어/C#' 카테고리의 다른 글
  • [C#] SortedSet 중복 없는 배열 생성
  • [C#] 백준 10989번 : StreamReader
  • [C#] 백준 2581번
  • [C#] 백준 10757번 : 큰 수를 다룰 땐 BigInteger를 활용하자
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (239)
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (7)
        • Unity (43)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
      • 자기 관리 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    tcp
    유니티
    Python
    C
    네트워크
    EntityFramework
    C언어
    C#
    EFCore
    Entityfamework
    디자인패턴
    백준
    unity
    java
    라즈베리파이
    코딩
    HTML
    자바
    coding
    게임서버
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[C#] 백준 1929번 : 에라토스테네스의 체 방식(빠르게 소수 찾기)
상단으로

티스토리툴바