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;
}

inum보다 작을 때 num=i+(num-i)에서 inum-i가 모두 소수일 때를 찾는 것이 목표이므로,

반복문인 while문과 조건문인 if문을 사용합니다.

이 때 while문의 조건식은 앞서 언급한 inum보다 작을 때, 즉 while(i<num)입니다.

void dePrime(int num){
  int i=2;
  while(i<num){
  
  }
}

if문의 조건식은 inum-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){
    
    }
  }
}

inum-i가 소수가 아닐 때에는 루프 변수의 값이 증가해야 하므로 else i++문을 추가해줍니다.

void dePrime(int num){
  int i=2;
  while(i<num){
    if(isPrime(i)&&isPrime(num-i){
    
    }
    else i++;  
  }
}

마지막으로, inum-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()이 완성됩니다.