Sigma Function :http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/C 密码:nefu

题目大意:已知Sigma函数表示的是该数的所有因子的和,要求出从1到n,Sigma函数的值为偶数的数的个数。

PC-大致分析:由于n比较大,从1到n遍历肯定会超时,而且对于每一个i都要进行判断其Sigma函数是否为偶数,但是现在能处理的就是先尝试着计算一下当n的值比较小的时候的Sigma函数为偶数的情况,具体实现就是先筛一遍素数(由于n为 10^12 ,所以筛素数的范围在10^6 即可),然后再对n进行素因子分解,对于每个因子,Sigma函数中连乘的每一项如果出现一个偶数,那么整个Sigma函数就是偶数(根据偶数X偶数=偶数,奇数X偶数=偶数,奇数X奇数=奇数)。当然这个算法会TLE ,但是会找到一些规律。

代码实现如下:(TLE代码)

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>using namespace std;
const int MAXN=1000100;
const int MAXN1=1000000;
bool isprime[MAXN];
int prime[MAXN];void getprime()
{int nprime=0;for(long long i=2;i<MAXN1;i++){if(!isprime[i]){prime[nprime++]=i;for(long long j=i*i;j<MAXN1;j+=i){isprime[i]=true;}}}
}int factor[100][2];
int cnt;
int getfactor(long long n)
{long long tmp=n;cnt=0;memset(factor,0,sizeof(factor));for(int i=0;prime[i]*prime[i]<=tmp;i++){factor[cnt][1]=0;if(tmp%prime[i]==0){factor[cnt][0]=prime[i];while(tmp%prime[i]==0){factor[cnt][1]++;tmp/=prime[i];}cnt++;}}if(tmp!=1){factor[cnt][0]=tmp;factor[cnt++][1]=1;}return cnt;
}int main()  //打表
{int t;long long sum;long long n;int casenum=0;getprime();scanf("%d",&t);while(t--){sum=0;scanf("%lld",&n);for(long long i=2;i<=n;i++){int k=getfactor(i);int flag=0;for(int j=0;j<k;j++){if(((int)(pow(factor[j][0],(factor[j][1]+1))-1)/(factor[j][0]-1))%2==0){flag=1;break;}}if(flag==1){cout<<i<<"sigma是偶数"<<endl;sum++;}}printf("Case %d: %lld\n",++casenum,sum);}return 0;
}

代码输出如下:

4
100
3sigma是偶数
5sigma是偶数
6sigma是偶数
7sigma是偶数
10sigma是偶数
11sigma是偶数
12sigma是偶数
13sigma是偶数
14sigma是偶数
15sigma是偶数
17sigma是偶数
19sigma是偶数
20sigma是偶数
21sigma是偶数
22sigma是偶数
23sigma是偶数
24sigma是偶数
26sigma是偶数
27sigma是偶数
28sigma是偶数
29sigma是偶数
30sigma是偶数
31sigma是偶数
33sigma是偶数
34sigma是偶数
35sigma是偶数
37sigma是偶数
38sigma是偶数
39sigma是偶数
40sigma是偶数
41sigma是偶数
42sigma是偶数
43sigma是偶数
44sigma是偶数
45sigma是偶数
46sigma是偶数
47sigma是偶数
48sigma是偶数
51sigma是偶数
52sigma是偶数
53sigma是偶数
54sigma是偶数
55sigma是偶数
56sigma是偶数
57sigma是偶数
58sigma是偶数
59sigma是偶数
60sigma是偶数
61sigma是偶数
62sigma是偶数
63sigma是偶数
65sigma是偶数
66sigma是偶数
67sigma是偶数
68sigma是偶数
69sigma是偶数
70sigma是偶数
71sigma是偶数
73sigma是偶数
74sigma是偶数
75sigma是偶数
76sigma是偶数
77sigma是偶数
78sigma是偶数
79sigma是偶数
80sigma是偶数
82sigma是偶数
83sigma是偶数
84sigma是偶数
85sigma是偶数
86sigma是偶数
87sigma是偶数
88sigma是偶数
89sigma是偶数
90sigma是偶数
91sigma是偶数
92sigma是偶数
93sigma是偶数
94sigma是偶数
95sigma是偶数
96sigma是偶数
97sigma是偶数
99sigma是偶数
Case 1: 83

经过总结和归纳,得到规律:Sigma函数为偶数的个数比较多,但是为奇数的个数比较少,而且只有x^2 , 2*x^2 , 2^x 时,其Sigma函数才为奇数,这样我们可以用去掉奇数的方法,来求出偶数的个数。
具体去掉这三种情况的方法要考虑用到容斥原理,因为两者之间可能会有重复的。

设n中有t1个x^2,则t1=sqrt(n);(自动向下取整了)

设n中有t2个2*x^2,则t2=sqrt(n/2); (自动向下取整了)  //t1与t2之间不会有重复的元素

设n中有t3个2^x,则   ,即 x*ln(2)<=ln(n),则t3=ln(n)/ln(2.0);

设n中有t4个x^2=2*2^x ,则重复的值有2^1,2^3,2^5,……即指数为奇数的都会重复,则t4的个数和t3有关,即 t4=(t3+1)/2;

设n中有t5个x^2=2^x ,则重复的值有2^0,2^2,2^4,……即指数为偶数的都会重复,则t5的个数和t3也有关,即t5=t3/2;

综上,所有偶数的个数即为:n-t1-t2-t3+t4+t5;

代码实现如下:

#include <iostream>
#include <stdio.h>
#include <math.h>using namespace std;int main()
{int T;int casenum;casenum=0;long long n;scanf("%d",&T);while(T--){scanf("%lld",&n);if(n==1){printf("Case %d: ",++casenum);printf("0\n");}else{long long t1=sqrt(n*1.0);long long t2=sqrt(n*1.0/2);long long t3=log(n*1.0)/log(2.0);long long t4=(log(n*1.0)/log(2)+1)/2;long long t5=t3/2;//long long t5=log(t1*1.0)/log(2.0);long long sum=n-t1-t2-t3+t4+t5;printf("Case %d: %lld\n",++casenum,sum);}}return 0;
}

另一种方法:

徒手解释:

代码实现:

#include <iostream>
#include <stdio.h>
#include <math.h>using namespace std;long long ds[100];
const long long MAXN=1000000000005;
int ff()
{int cnt=1;ds[0]=1;while(1){ds[cnt]=ds[cnt-1]*2;if(ds[cnt]>MAXN)break;cnt++;}return cnt;
}
int main()
{int T;int casenum=0;long long n;scanf("%d",&T);int k=ff();while(T--){scanf("%lld",&n);long long sum=0;for(int i=0;i<k;i++){if(ds[i]>n) break;sum+=((long long)sqrt((n/ds[i])+0.5)+1)/2;}printf("Case %d: %lld\n",++casenum,n-sum);}return 0;
}

Sigma Function相关推荐

  1. Sigma Function(LightOJ-1336)

    Problem Description Sigma function is an interesting function in Number Theory. It is denoted by the ...

  2. Uva 11395 Sigma Function (因子和)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/C   题目在文末 题意:1~n (n:1~1012)中,因子 ...

  3. Sigma Function LightOJ - 1336[约数和定理]

    题目大意:求1到n之间的数因子和是偶数有几个 解题思路:对于任意一个xxx,都有x=p1a1∗p2a2∗p3a3...∗pxas,x的所有约数之和就是sum=(1+p11+p12+..p1a1)∗(1 ...

  4. LightOJ 1336 Sigma Function

    题意: 每个数字都是由质因数乘积组成: 于是这个数的所有因子之和就是: 求小于等于n的数中所有质因子之和是偶数的数的个数. 思路: 如上式,求所有质因子之和就是每个质因子(p^0+p^1+p^2+-- ...

  5. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  6. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  7. aws lambda_AWS Lambda事件源映射:使您的触发器混乱无序

    aws lambda 最近,我们为Sigma Cloud IDE上的无服务器项目引入了两个新的AWS Lambda事件源(触发类型): SQS队列和DynamoDB流 . (是的,AWS在几个月前就向 ...

  8. AWS Lambda事件源映射:使您的触发器混乱无序

    最近,我们为Sigma Cloud IDE上的无服务器项目引入了两个新的AWS Lambda事件源(触发类型): SQS队列和DynamoDB流 . (是的,AWS在几个月前就向他们介绍了:但是我们仍 ...

  9. 【ACM】kuangbin基础数论专题

    知识补充:裴蜀定理 1.Bi-shoe and Phi-shoe 1.题意 给出一行数,求对应的数的欧拉函数值大于给出的数的数的最小和. 2.思路 我们知道素数表的欧拉函数值递增. 设素数a,b,b是 ...

  10. 数字图像处理第三章part2

    chap03-空间滤波基础 本节对应原书第三章的后半部分,第三章主讲图像增强,借机引入空间滤波,空间域分析和频率域分析后都会涉及. 从时域信号引入频率和空间频率 前面说过信号可以理解为函数.由于时间只 ...

最新文章

  1. 仿抖音底部导航效果(二)
  2. 图像分类:来自13个Kaggle项目的经验总结
  3. 大牛深入讲解!java数组冒泡排序从小到大
  4. boost::math::tools::continued_fraction_b用法的测试程序
  5. 有什么作用_轴套有什么作用?
  6. Delphi关于多线程同步的一些方法
  7. Linux 小知识翻译 - 「Linux的吉祥物企鹅叫什么名字?」
  8. TRUNCATE TABLE原理解析
  9. c++笔试必考内容:const使用详解
  10. JEP:Java表达式分析器
  11. FastDFS原理概括
  12. 力扣 1818. 绝对差值和(中等)
  13. 闲谈摩根 --兼答关于JP摩根和摩根斯坦利的渊源和区别,其他的摩根八卦
  14. HDFS的机架感知(rack aware)
  15. echarts地图导航飞线与层级穿透
  16. android校准电池,安卓手机电量校准教程
  17. 腾讯安全领御为张裕打造高端葡萄酒区块链溯源平台
  18. 概率论与数理统计:随机变量、分布律,分布函数,密度函数
  19. SPH物体漂浮模拟 之 波海泛舟
  20. 小程序组件的初始化方法attached

热门文章

  1. 用python根据年份判断生肖_C#中根据年份判断十二生肖
  2. Windows10 家庭版关闭安全中心(defender)
  3. int,long,double数值类的基本类型导致更新数据被清零
  4. java int相除向上取整_JAVA入门第一季学习补充 - 何以解忧?
  5. 市面上有哪些程序化软件?
  6. OutLook 2013 添加 USC gmail 邮箱 解决国内USC邮箱打不开
  7. 小米官网首页简单实现及分析
  8. MySql基础篇之SQL语句(DDL、DML、DQL、RCL)
  9. jQuery 效果 - 淡入淡出,fadeIn,fadeOut,fadeToggle的使用
  10. 【模型检测学习笔记】8:无限字上ω正则LT性质的验证