#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
int main()
{
unsigned num;
bool isPrime = 0;
scanf("%u", &num);
isPrime = true;
for (unsigned div = 2; div < num; ++div)
{
if (num % div == 0)
isPrime = false;
else
;
}
if (isPrime)
printf("%u is a prime number.\n", num);
else
printf("%u is not a prime number.\n", num);
return 0;
}
isPrime
의 디폴트 값은 true인 1이다. 소수는 어떤 수에 의해 완벽하게 나누어 떨어지면 안 된다.
나누어 떨어지면 소수가 아니므로 false값인 0을 갖게한다.
소수면 한 번도 안 나눠졌을 것이므로 1을 그대로 갖고, if(1)이면 그대로 실행 시킨다.
for (unsigned div = 2; (div*div) <= num; ++div)
{
if (num % div == 0)
{
isPrime = false;
printf("%u is divisible by %u and %u.\n", num, div, num / div);
}
else
;
}
저렇게 바꾸게 되면, 최대 루트 값까지만 출력하고, num/div
를 통해 나머지 약수를 출력해준다.
하지만, 64 같은 경우는 8 and 8로 나온다.
이를 하나의 8로 줄이기 위해서는
for (unsigned div = 2; (div*div) <= num; ++div)
{
if (num % div == 0)
{
isPrime = false;
if (num == div * div)
printf("%u is divisible by %u\n", num, div);
else
printf("%u is divisible by %u and %u.\n", num, div, num / div);
}
else
;
}
이렇게 코드를 짜주면 된다.