#include <stdio.h>
#include <math.h>
// 1回連分数展開して整数部分を返す
// numerator / (sqrt(N) + denominator)
// = 1 / (sqrt(23) - 4)
// = 1 + 1 / (7 / (sqrt(23) - 3))
// = ret + 1 / (numerator / (sqrt(N) + denominator))
// ret : 返り値
// numerator, denominator : in/out引数
int expand(int N, int *numerator, int *denominator) {
int rep;
*numerator = (N - *denominator * *denominator) / *numerator;
*denominator *= -1;
for( rep = 1;; rep++ ) {
*denominator -= *numerator;
if( N < (*numerator - *denominator) * (*numerator - *denominator) ) break;
}
return rep;
}
int isSquareNum(int n) {
int i;
if( n == 0 ) return 1;
for( i = 1; i * i <= n; i++ ) {
if( i * i == n ) return 1;
}
return 0;
}
int main(void) {
int N;
int cnt = 0;
for( N = 2; N <= 10000; N++ ) {
int numerator = 1;
int denominator = 1;
int firstNume, firstDeno;
int i;
if( isSquareNum(N) ) continue;
//printf("[%d;(", (int)floor(sqrt((double)N)));
firstNume = numerator = 1;
firstDeno
= denominator
= -1 * (int)floor(sqrt((double)N
)); for( i = 1;; i++ ) {
//printf("%d,", expand(N, &numerator, &denominator));
expand(N, &numerator, &denominator);
if( numerator == firstNume && denominator == firstDeno ) break;
}
//printf(")\n");
if( i % 2 != 0 ) cnt++;
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyAx5Zue6YCj5YiG5pWw5bGV6ZaL44GX44Gm5pW05pWw6YOo5YiG44KS6L+U44GZCi8vIG51bWVyYXRvciAvIChzcXJ0KE4pICsgZGVub21pbmF0b3IpCi8vID0gMSAvIChzcXJ0KDIzKSAtIDQpCi8vID0gMSArIDEgLyAoNyAvIChzcXJ0KDIzKSAtIDMpKQovLyA9IHJldCArIDEgLyAobnVtZXJhdG9yIC8gKHNxcnQoTikgKyBkZW5vbWluYXRvcikpCi8vIHJldCA6IOi/lOOCiuWApAovLyBudW1lcmF0b3IsIGRlbm9taW5hdG9yIDogaW4vb3V05byV5pWwCmludCBleHBhbmQoaW50IE4sIGludCAqbnVtZXJhdG9yLCBpbnQgKmRlbm9taW5hdG9yKSB7CiAgICBpbnQgcmVwOwoKICAgICpudW1lcmF0b3IgPSAoTiAtICpkZW5vbWluYXRvciAqICpkZW5vbWluYXRvcikgLyAqbnVtZXJhdG9yOwogICAgKmRlbm9taW5hdG9yICo9IC0xOwogICAgZm9yKCByZXAgPSAxOzsgcmVwKysgKSB7CiAgICAgICAgKmRlbm9taW5hdG9yIC09ICpudW1lcmF0b3I7CiAgICAgICAgaWYoIE4gPCAoKm51bWVyYXRvciAtICpkZW5vbWluYXRvcikgKiAoKm51bWVyYXRvciAtICpkZW5vbWluYXRvcikgKSBicmVhazsKICAgIH0KCiAgICByZXR1cm4gcmVwOwp9CgppbnQgaXNTcXVhcmVOdW0oaW50IG4pIHsKICAgIGludCBpOwoKICAgIGlmKCBuID09IDAgKSByZXR1cm4gMTsKCiAgICBmb3IoIGkgPSAxOyBpICogaSA8PSBuOyBpKysgKSB7CiAgICAgICAgaWYoIGkgKiBpID09IG4gKSByZXR1cm4gMTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4odm9pZCkgewogICAgaW50IE47CiAgICBpbnQgY250ID0gMDsKCiAgICBmb3IoIE4gPSAyOyBOIDw9IDEwMDAwOyBOKysgKSB7CiAgICAgICAgaW50IG51bWVyYXRvciA9IDE7CiAgICAgICAgaW50IGRlbm9taW5hdG9yID0gMTsKICAgICAgICBpbnQgZmlyc3ROdW1lLCBmaXJzdERlbm87CiAgICAgICAgaW50IGk7CgogICAgICAgIGlmKCBpc1NxdWFyZU51bShOKSApIGNvbnRpbnVlOwoKICAgICAgICAvL3ByaW50ZigiWyVkOygiLCAoaW50KWZsb29yKHNxcnQoKGRvdWJsZSlOKSkpOwogICAgICAgIGZpcnN0TnVtZSA9IG51bWVyYXRvciA9IDE7CiAgICAgICAgZmlyc3REZW5vID0gZGVub21pbmF0b3IgPSAtMSAqIChpbnQpZmxvb3Ioc3FydCgoZG91YmxlKU4pKTsKICAgICAgICBmb3IoIGkgPSAxOzsgaSsrICkgewogICAgICAgICAgICAvL3ByaW50ZigiJWQsIiwgZXhwYW5kKE4sICZudW1lcmF0b3IsICZkZW5vbWluYXRvcikpOwogICAgICAgICAgICBleHBhbmQoTiwgJm51bWVyYXRvciwgJmRlbm9taW5hdG9yKTsKICAgICAgICAgICAgaWYoIG51bWVyYXRvciA9PSBmaXJzdE51bWUgJiYgZGVub21pbmF0b3IgPT0gZmlyc3REZW5vICkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vcHJpbnRmKCIpXG4iKTsKCiAgICAgICAgaWYoIGkgJSAyICE9IDAgKSBjbnQrKzsKICAgIH0KCiAgICBwcmludGYoIiVkXG4iLCBjbnQpOwoKICAgIHJldHVybiAwOwp9Cg==