约瑟夫环的一个特殊情形:m = 2;
"我们把k设为2,然后给n个人,如果最后留下来的人是编号为n的,那么n就叫fix number.
现在的问题是,如果给出一个数,要求输出是不是fix number.如果是fix number的话,就输出"Oh,It's a fix number",如果不是的话就输出"Sorry,It isn't a fix number""
开始我怀疑形如 2^n-1 是 fix number(充要),只是通过拿 7 和 3 试验感觉到的,后来看了维基百科中的一段话(对k=2情况的讨论)后确信了。
下面的代码是AC了的,本来提交前运行结果不对来着,以为是 long long 对逻辑运算不支持(==!),后来又查了一遍,才发觉是我用的GCC不支持%lld,最后本机调试用的%I64d,提交用的%lld,就通过了。
/* csu 1054 */
# include <stdio.h>
int main()
{
long long int a;
while (~scanf("%lld", &a))
if ((a & (a+1)) == 0)
printf("Oh,It's a fix number\n");
else printf("Sorry,It isn't a fix number\n");
return 0;
}