HDU 2608解题报告

来源:互联网 发布:怎么修改手机游戏数据 编辑:程序博客网 时间:2024/05/17 08:11

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). 
 

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
3123
 

Sample Output
100
Hint
Hint S(3) = T(1) + T(2) +T(3) = 1 + (1+2) + (1+3) = 8 S(3) % 2 = 0
 

Author
yifenfei
 

Source
奋斗的年代
 

Recommend
yifenfei   |   We have carefully selected several similar problems for you:  2609 2617 2612 2610 2606 

         这道题属于简单的数论题,但是也有一定的技巧性。题目中的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<<11using 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));   }}
0 0