[BOJ] 2581 소수

Algorithm 2023. 2. 5. 20:26
반응형

 

 

//소수는 1과 자기자신만을 약수로 가지고있으므로 2부터 n-1 까지 수로 나눠지면 안되는 성질을 가지고있다.
//2,3,5,7,11,13,17....

 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace smilejsu
{
    class Program
    {
        //모든경우의 수를 검사하는 방법.
        //O(N)의 시간 복잡도를 가지고있으므로 파라미터값이 커질수록 시간값또한 커지게 된다.
        
        static bool isPrime(int num)
        {
            if (num == 1) return false;
            
            for (int i = 2; i < num; i++)
            {
                if (num % i == 0) return false;
            }

            return true;
            
        }
        
        
        
        // O(N^(1/2))시간 복잡도를 가진 방법으로 계산의 양이 기본방법보다 줄어든다.
        // 그 이유는 모든 약수들은 대칭을 이루는 성질을 이용하여 제곱근까지만 약수의 여부를 검증하면
        // 그보다 큰 약수의 수는 검사할 필요가 없어진다
        
        public bool CalcPrime(int num) 
        {
            int nr = (int)Math.Sqrt(num); 
            for (int i = 2; i <= nr; i++) 
            {
                if (num % i == 0)
                    return false; 
            } 
            return true; 
        }
        
        
        // 에라토스테네스의 체
        // 에라토스테네스의 체는 가장 대표적인 소수판별 알고리즘 이며 많은 양의 소수를 가장 빠르고 정확하게
        // 구하는 알고리즘이다.
        // 2부터 시작하여 자기자신을 제외한 나머지약수들을 다 지우며 나가며 결과적으로는 소수만 남게된다.
        void Eratosthenes(int num)
        {
            int[] temp = new int[num + 1];
            for(int i=2;i<num;i++)
            {
                temp[i] = i;
            }
            for(int i=2;i<=num;i++)
            {
                if (temp[i] == 0) continue;
                for(int j=i+i; j<= num; j+=i)
                {
                    temp[j] = 0;
                }
            }
        }

        static void Main(string[] args)
        {
            int m = int.Parse(Console.ReadLine());
            int n = int.Parse(Console.ReadLine());
            
            List<int> list = new List<int>();
            for (int i = m; i <= n; i++)
            {
                //Console.WriteLine("{0} : {1}", i, isPrime(i));
                if (isPrime(i))
                    list.Add(i);
            }

            if (list.Count > 0)
            { 
                var sum = list.Sum();
                Console.WriteLine(sum);
                var min = list.Min();
                Console.WriteLine(min);
            }
            else
            {
                Console.WriteLine(-1);
            }




        }
    }
}
반응형

'Algorithm' 카테고리의 다른 글

[BOJ] 1297 TV 크기  (0) 2023.02.07
[BOJ] 3040 백설 공주와 일곱 난쟁이  (0) 2023.02.06
[BOJ/C#] 11945 뜨거운 붕어빵  (0) 2023.02.02
[BOJ/C#] 4796 캠핑  (0) 2023.01.31
[BOJ/C#] 2864 5와 6의 차이  (0) 2023.01.31
: