본문 바로가기
프로그래밍/알고리즘

백준 1978번: 소수 찾기

by 만디기 2024. 3. 22.

문제 : https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net

 

1. 내 해답

// 입력한 수의 제곱근까지 for문을 돌려 소수일 경우 result 값을 1 증가시킨다.
// 입력한 수가 1이면 소수에서 제외하고(continue), 2인 경우 result 값을 1 증가시킨다.

#include <cstdio>
#include <cmath>

int main()
{
    int n = 0, result = 0;
    scanf("%d", &n);

    for ( int i = 0 ; i < n ; i++ )
    {
        int a = 0, j = 2;
        scanf("%d", &a);

        if ( ( a == 1 ) || ( a == 2 ) )
        {
            if ( a == 2 ) result++;
            continue;
        }

        for ( j = 2 ; j < int(sqrt(a)) + 1 ; j++ )
        {
            if ( a % j == 0 ) break;
        }

        if ( j == int(sqrt(a)) + 1 ) result++;
    }

    printf("%d", result);
    return 0;
}

 

 

2. 다른 사람의 해답

// (입력된 수 - 1)까지 나눠 보면서 소수 여부를 판단한다.

#include<stdio.h>
int main()
{
	int n,h=0,a,i;
	scanf("%d", &n);
	while (n--)
	{
		scanf("%d", &a);
		for (i = 2; i < a; i++)
			if ((a % i) == 0) break;
		if (i == a) h++;
	}
	printf("%d", h);
}

# 처음 입력받는 수는 사용하지 않는다.
input()
A = list(map(int, input().split()))

count = 0
for n in A:
    if n < 2: continue
    
    # for-else 문 : for 문의 내용이 끝나면 else 문의 내용을 실행한다.
    # break 되는 경우에는 else의 내용을 실행하지 않는다.
    for k in range(2, int(n ** 0.5) + 1):
        if not n % k:
            break
    else: count += 1
print(count)

'프로그래밍 > 알고리즘' 카테고리의 다른 글

백준 9063번 : 대지  (0) 2024.04.22
백준 2581번: 소수  (0) 2024.03.31
백준 9506번: 약수들의 합  (1) 2024.03.22
백준 2501번: 약수 구하기  (0) 2024.03.20
백준 5086번: 배수와 약수  (0) 2024.03.15