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()이 완성됩니다.
