[백준 1929번] 소수 구하기
문제
N이상 M 이하의 수 중에서 소수 구하기
틀림
#include <iostream>
#include <cmath>
int main()
{
int start;
int end;
int num;
std::cin >> start >> end;
for (int i = start; i <= end; i++)
{
num = sqrt(i);
// 1이면 소수가 아니고 2, 3은 소수이다.
if (num == 1 && i != 1)
{
std::cout << i << std::endl;
continue;
}
else
{
int isPrimeNum = true;
for (int j = 2; j <= num; j++)
{
if (i % j == 0)
{
isPrimeNum = false;
break;
}
}
if (isPrimeNum)
{
std::cout << i << std::endl;
}
}
}
}
처음에는 입력받은 수까지 반복문을 돌리면서 루트값까지 값을 나누면서 나누어 떨어지는지 아닌지를 확인하면 될 줄 알았다. ….. js 도 그렇게 풀었기 때문ㅇ,,,, 근데 왜 틀림,,?!?!?!?
j == num 이면 소수라는 뜻이므로 코드를 바꾸어 주어야 한다. + std::endl 대신에 \n 을 사용해야된다. 왠지는 정확히 모르겠지만,,여튼 std::endl 로하면 시간 초과가 뜨지만 \n 라면 같은 코드더라도 정답이 된다….
for (int j = 2; j <= num; j++)
{
if (i % j == 0)
{
break;
}
if (j == num)
{
std::cout << i << '\n';
}
}
else 문을 위와 같이 수정
코드
#include <iostream>
#include <cmath>
int main()
{
int start;
int end;
int num;
std::cin >> start >> end;
for (int i = start; i <= end; i++)
{
num = sqrt(i);
// 1이면 소수가 아니고 2, 3은 소수이다.
if (num == 1 && i != 1)
{
std::cout << i << '\n';
continue;
}
else
{
for (int j = 2; j <= num; j++)
{
if (i % j == 0)
{
break;
}
if (j == num)
{
std::cout << i << '\n';
}
}
}
}
}
풀이
제곱근까지만 소수 인지 아닌지 검사를 해도 그 수가 소수 인지 아닌지를 확인할 수 있다.
댓글남기기