프로그램 설명
어떤 수의 제곱이란 그 수를 자기 자신과 곱한 값을 의미합니다.
제곱수(완전제곱수)는 어떤 정수를 제곱했을 때 얻어지는 정수를 말합니다.
완전제곱수는 자연수의 제곱에 해당하며, 다음과 같습니다.
1, 4, 9, 16, 25, 36, 49, 64, 81, 100
다음은 1부터 100 사이의 모든 완전제곱수와 그 제곱근 목록입니다.
√1 = 1 (12 = 1) √4 = 2 (22 = 4) √9 = 3 (32 = 9) √16 = 4 (42 = 16) √25 = 5 (52 = 25) √36 = 6 (62 = 36) √49 = 7 (72 = 49) √64 = 8 (82 = 64) √81 = 9 (92 = 81) √100 = 10 (102 = 100)
반대로 비제곱수(non-perfect square)는 정수를 제곱해서 만들어지지 않는 모든 수를 뜻합니다.
아래 숫자들이 비제곱수에 해당합니다.
2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26 등…
알고리즘
1단계: 1부터 사용자가 지정한 수까지 모든 숫자를 하나씩 확인합니다. 2단계: 각 숫자가 완전제곱수인지 여부를 검사합니다. 3단계: 완전제곱수가 아니라면 해당 비제곱수를 화면에 출력합니다.
예제 코드
/* 비제곱수 출력 프로그램 */
#include <stdio.h>
#include <math.h>
int main() {
int number,i,x;
int times = 0;
clrscr();
printf("Print the Non Square Numbers till:");
scanf("%d", &number);
printf("The Non Squre Numbers are:");
printf("
");
for(i = 1;times<number;i++,times++){
x = sqrt(i);
if(i!=x*x){
printf("%d ", i);
}
}
getch();
return 0;
}코드 동작 원리
위 프로그램은 sqrt() 함수를 이용해 각 숫자의 제곱근을 구한 뒤, 그 값을 다시 제곱하여 원래 수와 비교합니다. 예를 들어 7의 제곱근은 약 2.645이지만 정수형 변수 x에 저장되면서 2로 잘리는데, 2×2 = 4는 7과 다르므로 7은 비제곱수로 판별되어 출력됩니다. 반면 16의 경우 제곱근이 정확히 4이고 4×4 = 16이므로 완전제곱수로 판별되어 출력에서 제외됩니다.
실행 결과
