Problem p00735 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <math.h>
#include <stdio.h>

using namespace std;

#define FOR(i, init, n) for (int i = init; i < n; i++)
#define REP(i, n) FOR(i, 0, n)
#define MON 1
#define SAT 6

int isPrime(int cand) {

  // int i, limit;

  int limit = sqrt(cand);
  // limit = (int)sqrt((double)cand);
  int i = limit;

  if (cand < 2) {
    return (0);
  }

  while (i > 1) {
    if (cand % i == 0) {
      break;
    }
    i--;
  }

  // for (; i > 1; i--){
  //	//for (i = limit; i > 1; i--){
  //	if (cand % i == 0){
  //		break;
  //	}
  // }

  if (i == 1) {
    return (1);
  } else {
    return (0);
  }

  // else{
  //	return(0);
  // }
}

int isMonSatPrime(int cand) {

  if (cand % 7 != 1 && cand % 7 != 6) {
    return (0);
  }

  if (cand < 2) {
    return (0);
  }

  int i = 6;
  int next = MON;

  while (i > 1) {
    if (cand % i == 0) {
      break;
    }

    i += next == SAT ? 5 : 2;
    next = next == SAT ? MON : SAT;
    // if (next == SAT){
    //	i += 5;
    //	next = MON;
    // }
    // else if (next == MON){
    //	i += 2;
    //	next = SAT;
    // }
  }

  return i == cand ? 1 : 0;
  // if (i == (cand)){
  //	return(1);
  // }
  // else{
  //	//puts("?????????????´???°??§??????????????????");
  //	return(0);
  // }
}

int main() {
  // FILE* fin = freopen("input.txt", "r", stdin);
  // FILE* fout = freopen("output.txt", "w", stdout);
  while (1) {
    int num;
    scanf("%d", &num);
    if (num == 1) {
      break;
    }
    printf("%d:", num);
    // int i = 6;
    int next = MON;

    for (int i = 0; i <= num;
         i += next == SAT ? 5 : 2, next = next == SAT ? MON : SAT) {
      if (num % i == 0) {
        if (isMonSatPrime(i) == 1) {
          printf(" %d", i);
        }
      }
    }
    // while (i <= num){
    //	if (num%i == 0){
    //		if (isMonSatPrime(i) == 1){
    //			printf(" %d", i);
    //		}
    //	}
    //	i += next == SAT ? 2 : 5;
    //	next = next == SAT ? MON : SAT;
    //	//if (next == SAT){
    //	//	i += 5;
    //	//	next = MON;
    //	//}
    //	//else if (next == MON){
    //	//	i += 2;
    //	//	next = SAT;
    //	//}
    // }
    puts("");
  }
  return 0;
}

Fixed submission:
#include <algorithm>
#include <math.h>
#include <stdio.h>

using namespace std;

#define FOR(i, init, n) for (int i = init; i < n; i++)
#define REP(i, n) FOR(i, 0, n)
#define MON 1
#define SAT 6

int isPrime(int cand) {

  // int i, limit;

  int limit = sqrt(cand);
  // limit = (int)sqrt((double)cand);
  int i = limit;

  if (cand < 2) {
    return (0);
  }

  while (i > 1) {
    if (cand % i == 0) {
      break;
    }
    i--;
  }

  // for (; i > 1; i--){
  //	//for (i = limit; i > 1; i--){
  //	if (cand % i == 0){
  //		break;
  //	}
  // }

  if (i == 1) {
    return (1);
  } else {
    return (0);
  }

  // else{
  //	return(0);
  // }
}

int isMonSatPrime(int cand) {

  if (cand % 7 != 1 && cand % 7 != 6) {
    return (0);
  }

  if (cand < 2) {
    return (0);
  }

  int i = 6;
  int next = MON;

  while (i > 1) {
    if (cand % i == 0) {
      break;
    }

    i += next == SAT ? 5 : 2;
    next = next == SAT ? MON : SAT;
    // if (next == SAT){
    //	i += 5;
    //	next = MON;
    // }
    // else if (next == MON){
    //	i += 2;
    //	next = SAT;
    // }
  }

  return i == cand ? 1 : 0;
  // if (i == (cand)){
  //	return(1);
  // }
  // else{
  //	//puts("?????????????´???°??§??????????????????");
  //	return(0);
  // }
}

int main() {
  // FILE* fin = freopen("input.txt", "r", stdin);
  // FILE* fout = freopen("output.txt", "w", stdout);
  while (1) {
    int num;
    scanf("%d", &num);
    if (num == 1) {
      break;
    }
    printf("%d:", num);
    // int i = 6;
    int next = MON;

    for (int i = 6; i <= num;
         i += next == SAT ? 5 : 2, next = next == SAT ? MON : SAT) {
      if (num % i == 0) {
        if (isMonSatPrime(i) == 1) {
          printf(" %d", i);
        }
      }
    }
    // while (i <= num){
    //	if (num%i == 0){
    //		if (isMonSatPrime(i) == 1){
    //			printf(" %d", i);
    //		}
    //	}
    //	i += next == SAT ? 2 : 5;
    //	next = next == SAT ? MON : SAT;
    //	//if (next == SAT){
    //	//	i += 5;
    //	//	next = MON;
    //	//}
    //	//else if (next == MON){
    //	//	i += 2;
    //	//	next = SAT;
    //	//}
    // }
    puts("");
  }
  return 0;
}