define T(n) as the sum of all numbers which are positive integers can divied n. and S(n) = T(1) + T(2) + T(3)…..+T(n).
3 1 2 3
1 0 0HintHint S(3) = T(1) + T(2) +T(3) = 1 + (1+2) + (1+3) = 8 S(3) % 2 = 0
通过打表会发现T(N)的一个特点,N=1,2,4,8,9,16,18,25,32,36,49,50,64....时T(N)%2==1,其余的都是0
结果见下表。
T(N)%2 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1...
S(N) 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0...
所以S(N)就是统计从 1-N 之间有若干好多个满足T(i)= 1的数
也可以证明 参考http://blog.youkuaiyun.com/zuihoudebingwen/article/details/7976175
代码如下:
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
m=(int)sqrt(n)+(int)sqrt(n/2);
printf("%d\n",m%2);
}
return 0;
}
注意要用G++交 c++不通过double转换成int