알고리즘 문제 풀이/백준

[백준 1978번/C#] 소수 찾기

Ardmos :) 2023. 10. 24. 19:06

배운 점:

소수인지 여부를 판단하는 방법 중 효과적인 방법을 배웠다.

바로 제곱근을 이용하는 방법.

모든 약수들은 대칭을 이루는 성질을 이용하여 제곱근까지만 약수의 여부를 검증하면 

그보다 큰 약수의 수는 검사할 필요가 없어지는 점을 이용한 방법이다.

 

실수한 점:

 

using System;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 총 정수 개수 n
            int n = int.Parse(Console.ReadLine());
            // 모든 숫자 입력받고
            int[] inputs = Array.ConvertAll(Console.ReadLine().Trim().Split(' '), int.Parse);
            int answer = 0;

            // 입력받은 숫자 하나씩 확인 후 소수면 answer에 카운트 ++;
            foreach (int i in inputs)
            {
                if(CalcPrime(i)) answer++;
            }
            Console.WriteLine(answer);
        }

        // 소수인지 확인 후 소수면 true를 반환하는 메소드
        static bool CalcPrime(int num)
        {
            if (num == 0 || num == 1) return false;

            // 제곱근으로 확인하는 방식. 2~num-1 까지의 모든 숫자로 나눠보는 방식보다 빠르다.
            int nr = (int)Math.Sqrt(num);
            for (int i = 2; i <= nr; i++)
            {
                if (num % i == 0)
                    return false;
            }
            return true;
        }
    }
}
728x90