//2014-3-11 09:16:50
#include <stdio.h>
#define MAX 1000000
int a[MAX] = {1, 2};
int main(){
int n;
for(n = 2; n != MAX; ++n)
a[n] = (a[n - 1] + a[n - 2]) % 3;
while(scanf("%d", &n) == 1)
printf(a[n] ? "no\n" : "yes\n");
return 0;
}
优化好的代码:
//2014-3-11 09:29:47
#include <stdio.h>
int main(){
int n;
while(scanf("%d", &n) == 1)
printf(n % 4 == 2 ? "yes\n" : "no\n");
return 0;
}
两者复杂度对比:
15MS 4144K 253B
0MS 228K 151B
第二种用的是循环判断,因为余数只有3种,即0,1,2,共8种情况,所以循环最大为2^3=8,,列出前八种情况可知,当n=2或n=6时yes,即n%4==2时yes。