Twin Prime Conjecture

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2950    Accepted Submission(s): 1016
Problem Description
If we define dn as: dn = pn+1-pn, where pi is the i-th prime. It is easy to see that d1 = 1 and dn=even for n>1. Twin Prime Conjecture states that "There are infinite consecutive primes differing by 2".

Now given any positive integer N (< 10^5), you are supposed to count the number of twin primes which are no greater than N.
 
Input
Your program must read test cases from standard input.

The input file consists of several test cases. Each case occupies a line which contains one integer N. The input is finished by a negative N.
 
Output
For each test case, your program must output to standard output. Print in one line the number of twin primes which are no greater than N.
 
Sample Input
  1. 1
  2. 5
  3. 20
  4. -2
 
Sample Output
  1. 0
  2. 1
  3. 4
 
题目大意:
题目的意思是,给定一个数字n。求小于n的孪生素数有多少对。孪生素数的概念就是说,相邻的两个素数之间差值为2。例如:5和7,17和19,这些都是。

解题思路:
先用筛法打了一个素数表,在素数表的基础上打出来一个直接保存结果的数组c[](树状数组直接处理的数组)。这样就可以直接用树状数组来解决了。基础的BIT应用。
如果不懂树状数组的话,可以去看这篇博客:搞懂树状数组

源代码:
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string>
  5. #include<stack>
  6. #include<queue>
  7. #include<vector>
  8. #include<deque>
  9. #include<map>
  10. #include<set>
  11. #include<algorithm>
  12. #include<string>
  13. #include<iomanip>
  14. #include<cstdlib>
  15. #include<cmath>
  16. #include<sstream>
  17. #include<ctime>
  18. using namespace std;
  19.  
  20. typedef long long ll;
  21. #define MAXN 100005
  22. int c[MAXN];//c[]从下标为1的地方开始
  23.  
  24. int lowbit(int x)
  25. {
  26. return x&(-x);
  27. }
  28.  
  29. void add(int x, int num)//x代表位置,num代表增量
  30. {
  31. while(x<=MAXN)
  32. {
  33. c[x]+=num;
  34. x+=lowbit(x);
  35. }
  36. }
  37.  
  38. int sum(int x)//代表求解1~x的和(x是下标)
  39. {
  40. int res = 0;
  41. while(x>0)
  42. {
  43. res+=c[x];
  44. x-=lowbit(x);
  45. }
  46. return res;
  47. }
  48.  
  49. int primer[MAXN];
  50. int number[MAXN];
  51.  
  52. void init()
  53. {
  54. memset(number,0,sizeof(number));
  55. int i,j;
  56. int cnt=0;
  57. for(i=2;i<=100000;i++)
  58. {
  59. if(number[i]==0)
  60. {
  61. cnt++;
  62. primer[cnt]=i;
  63. for(j=i*2;j<=100000;j+=i)
  64. {
  65. number[j]=1;
  66. }
  67. }
  68. }//素数表OK
  69. for(i=2;i<=cnt;i++)
  70. {
  71. if(primer[i]-primer[i-1]==2)
  72. {
  73. add(primer[i],1);//发现一对增加一个
  74. }
  75. }
  76. }
  77. int main()
  78. {
  79. int n;
  80. init();
  81. while(scanf("%d",&n)!=EOF&&n>0)
  82. {
  83. printf("%d\n",sum(n));
  84. }
  85. return 0;
  86. }




HDU3792---Twin Prime Conjecture(树状数组)的更多相关文章

  1. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)

    参考链接http://blog.csdn.net/acm_cxlove/article/details/8264290http://blog.csdn.net/w00w12l/article/deta ...

  2. Twin Prime Conjecture(浙大计算机研究生保研复试上机考试-2011年)

    Twin Prime Conjecture                                            Time Limit: 2000/1000 MS (Java/Othe ...

  3. HDU_3792_(素数筛+树状数组)

    Twin Prime Conjecture Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. HDU 4947 GCD Array 容斥原理+树状数组

    GCD Array Time Limit: 11000/5500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. HDU 4746 莫比乌斯反演+离线查询+树状数组

    题目大意: 一个数字组成一堆素因子的乘积,如果一个数字的素因子个数(同样的素因子也要多次计数)小于等于P,那么就称这个数是P的幸运数 多次询问1<=x<=n,1<=y<=m,P ...

  6. bzoj3529(莫比乌斯反演+离线+树状数组)

    在你以为理解mobus的时候,苦苦想通过化简公式来降低复杂度时,这题又打了我一巴掌. 看来我并没有理解到acmicpc比赛的宗旨啊. 这么多次查询可以考虑离线操作,使用树状数组单点更新. /***** ...

  7. Codeforce385C 树状数组+素因子分解

    题目大意: 给多个区间的询问,在询问区间内每一个出现的素数去计算所有数中有多少个数能被这个素数整除 然后将所有素数得到的对应值求和 这里因为初始给定的数不超过10000000,最多670000不到的素 ...

  8. HDU 4777 Rabbit Kingdom 树状数组

    分析:找到每一个点的左边离他最近的不互质数,记录下标(L数组),右边一样如此(R数组),预处理 这个过程需要分解质因数O(n*sqrt(n)) 然后离线,按照区间右端点排序 然后扫一遍,对于当前拍好顺 ...

  9. 【BZOJ3529】【莫比乌斯反演 + 树状数组】[Sdoi2014]数表

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

随机推荐

  1. 简易RPC框架-上下文

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  2. python中openpyxl的用法【安装,以及一些基本的操作】

    概述 Openpyxl是python中简单易用的操作excel电子表格的一个模块.接下来呢,跟博主一起学习一下吧  ----_<_>_---- 首先先清楚一些excel的基本概念: 在op ...

  3. Windows7 64位环境下Python-igraph环境配置

    本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 其实配置很简单,但是网上的几个都不咋靠谱.而且我本身对这个软件挺感兴趣.igraph是一个网络 ...

  4. 独热编码OneHotEncoder简介

    在分类和聚类运算中我们经常计算两个个体之间的距离,对于连续的数字(Numric)这一点不成问题,但是对于名词性(Norminal)的类别,计算距离很难.即使将类别与数字对应,例如{'A','B','C ...

  5. 使用Identity Server 4建立Authorization Server (1)

    预备知识: http://www.cnblogs.com/cgzl/p/7746496.html 本文内容基本完全来自于Identity Server 4官方文档: https://identitys ...

  6. 一键生成koa/koa2项目:

    一键生成koa/koa2项目: 1. npm install -g koa-generator 2.新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) ...

  7. vue-修改vue项目运行端口号

    一.导语 最近在研究,左侧是导航,右侧是显示对应的内容,左右可单独滚动,不互相影响,如何实现? 萝卜蹲的游戏大家都玩过,白萝卜蹲,白萝卜蹲,白萝卜蹲完红萝卜蹲,可是若是在含有滚动条的页面的情况下,白萝 ...

  8. [Bayesian] “我是bayesian我怕谁”系列 - Variational Autoencoders

    本是neural network的内容,但偏偏有个variational打头,那就聊聊.涉及的内容可能比较杂,但终归会 end with VAE. 各个概念的详细解释请点击推荐的链接,本文只是重在理清 ...

  9. RobotFramework自动化测试环境配置

    现在工作是做自动化测试平台维护的,平台用的C#做的,主要是用来测试CMBRun项目,它是c/s结构的项目,而b/s结构的项目主要使用RF+Python来做.做这块之前听过自动化测试,身边的朋友也有做这 ...

  10. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...