SMALL
https://www.acmicpc.net/problem/1978
1978번: 소수 찾기
첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.
www.acmicpc.net
- 문제
- 문제풀이
처음에는 숫자를 입력받아 2부터 자기자신 전 까지 0으로 나누어 떨어지는 값을 제외하고 개수를 세어주면 소수의 개수가 된다.
두번째로는 에라토스테네스의 체를 사용했다.
[알고리즘] 에라토스테네스의 체
에라토스테네스의 체란? 소수를 판별하는 알고리즘. 소수들을 대량으로 빠르게 구할 수 있는 알고리즘이다. 에라토스테네스의 체의 원리 단일 숫자의 소수 여부를 확인하는 방법은 2부터 N까지
yongyongyee.tistory.com
- 코드 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
int N;
int arr[1000];
int count;
int d = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
count = 0;
scanf("%d",&arr[i]);
if (arr[i] == 1) continue;
for (int j = 2; j < arr[i]; j++) {
if (arr[i] % j == 0) {
count++;
}
}
if (count == 0) {
d++;
}
}
printf("%d", d);
}
- 코드 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define _CRT_SECURE_NO_WARNINGS
int a[1000001];
int number = 1000001;
void primeNumberSieve() {
for (int i = 2; i <= number; i++) {
a[i] = i;
}
for (int i = 2; i <= number; i++) {
if (a[i] == 0) continue;
for (int j = 2 * i; j <= number; j += i) {
a[j] = 0;
}
}
}
int main(void)
{
int count = 0;
int N;
scanf("%d", &N);
int input = 0;
primeNumberSieve();
for (int i = 1; i <= N; i++) {
scanf("%d", &input);
if (input == 1) continue;
for (int i = 0; i < number; i++) {
if (a[i] == input) {
count++;
}
}
}
printf("%d", count);
}
- 후기
소수를 구하는 법을 알게되었다. 그럼 다수는 버려야하나? 약간 기찻길 문제
LIST
'백준 > C언어' 카테고리의 다른 글
[C언어]백준 9020번: 골드바흐의 추측 (0) | 2023.02.05 |
---|---|
[C언어]백준 1929번: 소수 구하기 (0) | 2023.02.04 |
[C언어]백준 2960번: 에라토스테네스의 체 (0) | 2023.02.02 |
[C언어]백준 17827번: 달팽이 리스트 (0) | 2023.01.28 |
[C언어]백준 23253번: 자료구조는 정말 최고야 (0) | 2023.01.28 |