HW1 풀이
Written on May 15, 2017
과제 1번은 강의시간에 배운 isPrime()
함수를 이용하여 짝수를 두 소수의 합으로 표현하는 함수 dePrime()
을 작성하는 것이었습니다.
isPrime()
함수는 다음과 같았습니다.
int isPrime(int num){
int i=2;
while(i<num){
if(num%i==0) return 0;
i++;
}
return 1;
}
함수 dePrime()
에는 특별한 반환이 필요하지 않으므로 타입을 void
로 정하고, 매개변수를 int num
으로 설정해줍니다.
void dePrime(int num)
int num
은 2보다 큰 짝수로서 두 소수의 합으로 표현되기 위한 수입니다.
루프 변수 int i
를 선언하고 가장 작은 소수는 2이기 때문에 int i=2
로 초기화해줍니다.
void dePrime(int num){
int i=2;
}
i
는 num
보다 작을 때 num=i+(num-i)
에서 i
와 num-i
가 모두 소수일 때를 찾는 것이 목표이므로,
반복문인 while
문과 조건문인 if
문을 사용합니다.
이 때 while
문의 조건식은 앞서 언급한 i
는 num
보다 작을 때, 즉 while(i<num)
입니다.
void dePrime(int num){
int i=2;
while(i<num){
}
}
if
문의 조건식은 i
와 num-i
가 모두 소수일 때, 즉 isPrime(i)
와 isPrime(num-i)
가 모두 참일 때 이므로,
if(isPrime(i)&&isPrime(num-i))
로 표현할 수 있습니다.
void dePrime(int num){
int i=2;
while(i<num){
if(isPrime(i)&&isPrime(num-i){
}
}
}
i
와 num-i
가 소수가 아닐 때에는 루프 변수의 값이 증가해야 하므로 else i++
문을 추가해줍니다.
void dePrime(int num){
int i=2;
while(i<num){
if(isPrime(i)&&isPrime(num-i){
}
else i++;
}
}
마지막으로, i
와 num-i
가 소수일 때 각각의 값을 출력해주고 반복문을 끝내면,
void dePrime(int num){
int i=2;
while(i<num){
if(isPrime(i)&&isPrime(num-i)){
printf("%d = %d + %d\n",num,i,num-i);
break;
}
else i++;
}
}
으로 함수 dePrime()
이 완성됩니다.