想不出来,就随便变了一个公式n*(n+1)/2%2
代入2 3 4 5结果正确后就交了...然后就过了
看了别人的证明才知道自己的为什么是对的....
//----------------------------------------------------------------------
本题相当于n对数,2*n个位置来放这2*n个数。
现在我们假设数k放的第一个位置是ak,第二个位置为bk,默认ak在前面。
则有:bk-ak=k+1,这样s(bk-ak) = n*(n+1)/2+n = n*(n+3)/2
而对于他们本身有s(bk+ak)=n*(2*n+1)
所以可以解得:s(ak)=n*(3*n-1)/4 s(bk)=5*n*(n+1)/2
由于sigma(bk)肯定是整数,现在只需要sigma(ak)为整数就可以了,所以只需要
n%4==0或者(3*n-1)%4==0
//-----------------------------------------------------------------------
那么为什么我的公式正确呢?把n=4*k || n=4*k+1代入即可证明
代码如下:
#include <stdio.h>
int main(void) {
int n;
while(scanf("%d", &n), n) {
n = n*(n+1)/2%2;
if(n) printf("N\n");
else printf("Y\n");
}
}