链接
题意:求【1,n】 区间内,有多少个数x,满足x的因子和为偶数
解法:
由上图(2)可得:只要任意一个括号值为偶数则N的因子之和必为偶数
可得:N因子和为偶数的情况远远多于和为奇数的情况,则可通过求【1,n】中和为奇数个数ans,再n-ans即为和为偶数个数
现在问题转化为 :求【1,n】中因子和为奇数的个数
1.当某个数存在因子2时,则
必定为奇数 (因为:1+偶数+偶数……=奇数)
2.因为其他所有素数都是奇数,则只有当ai为偶数时,括号值才为奇数 (因为:奇数的任意次方为奇数 ,所以1+奇数*偶数=奇数)
同时满足以上两个条件的数只能是平方数(分解后因子ai为偶数)和 2*平方数
综上: 形如
和
的因子和才为奇数
【1,n】中因子和为奇数的个数为
![]()
n-ans 即为题目所求
#include<bits/stdc++.h> #define ll long long using namespace std; int T; ll n; int test=1; int main() { scanf("%d",&T); while(T--) { scanf("%lld",&n); ll ans=n; ans-=(ll)sqrt(n); ans-=(ll)sqrt(n/2); printf("Case %d: %lld\n",test++,ans); } }
LightOJ-1336 Sigma Function 因子和为奇数个数
最新推荐文章于 2021-01-06 19:55:39 发布