题目大意:求1到n之间的数因子和是偶数有几个
解题思路:对于任意一个 x x x,都有 x = p 1 a 1 ∗ p 2 a 2 ∗ p 3 a 3 . . . ∗ p x a s , x 的 所 有 约 数 之 和 就 是 s u m = ( 1 + p 1 1 + p 1 2 + . . p 1 a 1 ) ∗ ( 1 + p 2 1 + p 2 3 + . . . + p 2 a 2 ) ∗ . . . . . ∗ ( 1 + p x 1 + p x 2 + p x 3 + . . + p x a x ) x=p_1^{a_1}*p_2^{a_2}*p_3^{a_3}...*p_x^{a_s},x的所有约数之和就是sum=(1+p_1^1+p_1^2+..p_1^{a_1})*(1+p_2^1+p_2^3+...+p_2^{a2})*.....*(1+p_x^1+p_x^2+p_x^3+..+p_x^{a_x}) x=p1a1∗p2a2∗p3a3...∗pxas,x的所有约数之和就是sum=(1+p11+p12+..p1a1)∗(1+p21+p23+...+p2a2)∗.....∗(1+px1+px2+px3+..+pxax)
根据:偶数*任何数=偶数,如果一个数的约数之和是奇数那么sum的式子中的每一项都是奇数,减掉1那么 p x 1 + p x 2 . . . . + p x a x p_x^1+p_x^2....+p_x^{a_x} px1+px2....+pxax和就是偶数
因
为
质
因
数
都
是
奇
数
,
那
么
和
要
是
偶
数
那
么
a
x
一
定
是
偶
数
因为质因数都是奇数,那么和要是偶数那么a_x一定是偶数
因为质因数都是奇数,那么和要是偶数那么ax一定是偶数
这
些
数
就
是
平
方
数
这些数就是平方数
这些数就是平方数
还
有
一
种
情
况
就
是
n
/
2
的
平
方
数
也
是
满
足
的
还有一种情况就是n/2的平方数也是满足的
还有一种情况就是n/2的平方数也是满足的
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef long long int LL;
#define N 1001000
#define ESP 1e-8
#define INF 0x3f3f3f3f
#define memset(a,b) memset(a,b,sizeof(a))
int main()
{
int T, t=1;
scanf("%d", &T);
while(T --)
{
LL n;
scanf("%lld", &n);
LL sum = n;
sum -= (int)sqrt(n);
sum -= (int)sqrt(n/2);
printf("Case %d: %lld\n", t++, sum);
}
return 0;
}