求1~n中多少个数的因子和为偶数。
推荐一篇博客
主要思路是:直接求有多少个数的因子和为偶数不太好求,那么我们可以转换思路,求出有多少书读的因子和为奇数,如何一减即可。
1.首先我们要知道:
偶数*偶数=偶数
奇数 *奇数=奇数
偶数 *奇数=偶数
2.对于题目中给定的求因子和的公式,如果其中的每一项都为奇数,那么这个结果就都为奇数。
首先,对于2来说,无论分解后,2的指数为多少,它所在的那一项都为奇数。故2的幂Wie多少不影响。对于其他项,如果该质因子在分解后的表达式中的指数为偶数,那么其因子所在项为奇数,所有整个因子和为奇数。
那么可以得到两种情况,当n为完全平方数,即分解后每个质因子的幂都为偶数,那么n的质因子和为奇数。
当n/2为完全平方数,同理,因为2的幂的奇偶不影响。
因此,只要用n减去n以内完全平方数和/2后是完全平方数的个数。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int main()
{
int t,cas=0;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
printf("Case %d: ",++cas);
ll a=sqrt(n);//即可求出完全平方数的个数
ll b=sqrt(n/2);
printf("%lld\n",n-a-b);
}
return 0;
}