#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* 実験回数の上限 */
#define MAX_NUM 200

/* ループ回数の上限 */
#define MAX_LOOP 100000

/* 文字列の長さ上限 */
#define MAX_LEN 20

/* 関数のプロトタイプ宣言 */
int is_loop(int);
int square_sum(int);
int num;

int main(){
  int i;
  srand((unsigned)time(NULL));

  for(i=1; i<MAX_NUM; i++){
    num = rand();
    /* iが89ループの条件を満たしているかを確認 */
    if(is_loop(num)) printf("OK\n");
    else printf("NG\n"); 
  }
  printf("\n");
  return 0;
}

/* nが89ループの条件を満たしているか */
/* 満たしているなら1，そうでないなら0を返す */
int is_loop(int n){
  int i;
  for(i=0; i<MAX_LOOP; i++){
    printf("%d -> ", n);
    if(n==1 || n==89) return 1;
    n=square_sum(n);
  }
  return 0;
}

/* nの各桁の数字の2乗の和を返す */
int square_sum(int n){
  char str[MAX_LEN];
  int i, ret=0;
  /* 数字を文字列に変換 */
  sprintf(str, "%d", n);
  /* 各桁の2乗の和を計算 */
  for(i=0; str[i] != '\0'; i++){
    ret += (str[i]-'0')*(str[i]-'0');
  }
  return ret;
}
