0 or 1
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2804 Accepted Submission(s): 730
Problem Description
Solving problem is a interesting thing. Yifenfei like to slove different problem,because he think it is a way let him more intelligent. But as we know,yifenfei is weak in math. When he come up against a difficult math problem, he always try to get a hand. Now the problem is coming! Let we
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).
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).
Input
The first line of the input contains an integer T which means the number of test cases. Then T lines follow, each line consists of only one positive integers n. You may assume the integer will not exceed 2^31.
Output
For each test case, you should output one lines of one integer S(n) %2. So you may see the answer is always 0 or 1 .
Sample Input
3 1 2 3
Sample Output
1 0 0HintHint S(3) = T(1) + T(2) +T(3) = 1 + (1+2) + (1+3) = 8 S(3) % 2 = 0
Author
yifenfei
Source
Recommend
这道题属于简单的数论题,但是也有一定的技巧性。题目中的T(n)相当于是n的所有约数之和,S(n)是T(1)~T(n)之和。根据数的唯一分解定理可以得到,n=(2^x1)*(p2^x2)*……*(pk^xk)将n分解质因数。则T(n)=(1+2+2^2+……+2^x1)*(1+p2+……+p2^x2)*……*(1+pk+……+pk^xk)。含有2的多项式之和必然为奇数。而对于后边的多项式,由于pk是n的质因数,且必为奇数。要保证k个多项式之积都为奇数,那么只有所有的多项式均为奇数才行。则x2,x3……xk必须都为偶数。则T(n)就可以写成(2^a)*(x^2)。所以当T(n)=2*(x^2)或者T(n)=x^2。要求S(n)的大小就要求出在1~n中有多少个x^2,有多少个2*x^2。个数分别为(int)sqrt(n)和(int)sqrt(n/2)。千万要注意强制转换。
本题要深刻理解整数的唯一分解定理这些基本的数论知识才能比较容易的推出结论。打表也可以,但不一定每个人都能看出这个规律。
参考代码:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<ctime>
#include<cstdlib>
#include<iomanip>
#include<utility>
#define pb push_back
#define mp make_pair
#define CLR(x) memset(x,0,sizeof(x))
#define _CLR(x) memset(x,-1,sizeof(x))
#define REP(i,n) for(int i=0;i<n;i++)
#define Debug(x) cout<<#x<<"="<<x<<" "<<endl
#define REP(i,l,r) for(int i=l;i<=r;i++)
#define rep(i,l,r) for(int i=l;i<r;i++)
#define RREP(i,l,r) for(int i=l;i>=r;i--)
#define rrep(i,l,r) for(int i=1;i>r;i--)
#define read(x) scanf("%d",&x)
#define put(x) printf("%d\n",x)
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<11
using namespace std;
int main()
{
int t,n;
read(t);
while(t--)
{
read(n);
int s=(int)sqrt(n*1.0)+(int)sqrt(n/2.0);
printf("%d\n",(s&1));
}
}