hdu 2608(数论)

来源:互联网 发布:知金教育集团 编辑:程序博客网 时间:2024/05/17 15:19

点击打开链接


题意:

T(n)表示能够被n整除的所有数字和,S(n)=T(1)+T(2)+...+T(n);

S(n)%=2;




列出前100项,可以发现有两种转换0->1     1->0

并且可以发现转换的位置要么帅平方数要么帅平方数的二倍,

所以可以先求出2^31内的所有平方数及其二倍,然后判断n是在哪个范围内的。。。


#include"stdio.h"#include"string.h"#include"algorithm"#define N 100000using namespace std;typedef __int64 LL;LL A[N];int cnt;void fun(){int i,j;cnt=0;for(i=1;i<=46368;i++)A[cnt++]=i*i;j=cnt;for(i=0;i<j;i++)A[cnt++]=2*A[i];sort(A,A+cnt);}int main(){int T;int n;int i;fun();scanf("%d",&T);while(T--){scanf("%d",&n);for(i=0;i<cnt;i++){if(n>=A[i]&&n<A[i+1]){printf("%d\n",i%2==0?1:0);break;}}}return 0;}



原创粉丝点击