题目地址:http://lightoj.com/volume_showproblem.php?problem=1336
题意:求从1到n之间因子和为偶数的数的个数。
我们知道 :偶X奇=偶 偶X偶=奇 奇X奇=奇
那么只要有一个(1+pi+…+piai)之和为偶数,因子数之和便是偶数,只有(1+pi+…+piai)之和全为奇数,因子和才为奇数。我们可以求从1到n之间因子和为奇数的数的个数,再用n减去这个数。
当pi=2时,(1+pi+…+piai)之和肯定为奇数;其他情况下,pi为奇数,在ai为奇数时,(1+pi+…+piai)之和为偶数,pi为偶数时,(1+pi+…+piai)之和为奇数。
所以,2m,x2,2mx2三种满足条件,进行化简得,x2,2x2满足条件。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
int main()
{
int t,ans;
scanf("%d",&t);
ans=1;
while(t--)
{
long long n,sum;
scanf("%lld",&n);
sum=n-(long long)sqrt(n);///别忘了将double转换成long long ,是向下取整
sum=sum-(long long)sqrt(n/2);
printf("Case %d: %lld\n",ans,sum);
ans++;
}
return 0;
}