题意:筛一段区间内素数的个数,区间宽度10w,区间范围INT_MAX

分析:用sqrt(INT_MAX筛一遍即可),注意先筛下界,再筛上届,因为有可能包含

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <ctime>
  4. #include <vector>
  5. #include <cmath>
  6. #include <map>
  7. #include <queue>
  8. #include <algorithm>
  9. #include <cstring>
  10. using namespace std;
  11. typedef long long LL;
  12. const int N=1e7+;
  13. const int INF=0x3f3f3f3f;
  14. int cnt;
  15. bool v[N];
  16. LL prime[];
  17. void getprime(){
  18. for(int i=;i*i<=N-;++i)
  19. if(!v[i])
  20. for(int j=i*i;j<=N-;j+=i)
  21. v[j]=;
  22. for(int i=;i<=N-;++i)
  23. if(!v[i])prime[++cnt]=i;
  24. }
  25. int ans;
  26. vector<LL>g,c;
  27. bool vis[];
  28. void dfs(int pos,LL res){
  29. if(pos==g.size()){
  30. int tmp=;
  31. for(int i=;i<g.size();++i){
  32. if(vis[i])continue;
  33. tmp*=(c[i]+);
  34. }
  35. ans+=tmp;
  36. return;
  37. }
  38. dfs(pos+,res);
  39. vis[pos]=;
  40. for(LL i=,k=g[pos];i<=c[pos];++i,k*=g[pos])
  41. dfs(pos+,res*k);
  42. vis[pos]=;
  43. return;
  44. }
  45. int main()
  46. {
  47. getprime();
  48. int cas=,T;
  49. scanf("%d",&T);
  50. while(T--){
  51. LL t,n;
  52. scanf("%lld",&n),t=n;
  53. g.clear(),c.clear();
  54. for(int i=;i<=cnt&&prime[i]*prime[i]<=t;++i){
  55. if(t%prime[i])continue;
  56. int tot=;
  57. g.push_back(prime[i]);
  58. while(t%prime[i]==)t/=prime[i],++tot;
  59. c.push_back(tot);
  60. }
  61. if(t>)g.push_back(t),c.push_back();
  62. ans=;
  63. dfs(,);
  64. printf("Case %d: %d\n",++cas,(ans>>)+);
  65. }
  66. return ;
  67. }

LightOJ 1197 Help Hanzo 素数筛的更多相关文章

  1. Light oj 1197 - Help Hanzo (素数筛技巧)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 给你a和b求a到b之间的素数个数. 先在小区间素数筛,大区间就用类似素数筛的想法 ...

  2. LightOj 1197 Help Hanzo 区间素数筛

    题意: 给定一个区间a,b,a-b>=100000,1<=a<=b<=231,求出给定a,b区间内的素数的个数 区间素数筛 (a+i-1)/ ii向上取整,当a为 i 的整数倍 ...

  3. LightOJ 1197 Help Hanzo(区间素数筛选)

    E - Help Hanzo Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit ...

  4. Help Hanzo (素数筛+区间枚举)

    Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000).     (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...

  5. LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...

  6. LightOj 1197 Help Hanzo (区间素数筛选)

    题目大意: 给出T个实例,T<=200,给出[a,b]区间,问这个区间里面有多少个素数?(1 ≤ a ≤ b < 231, b - a ≤ 100000) 解题思路: 由于a,b的取值范围 ...

  7. LightOJ 1197 LightOJ 1197(大区间素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1197 题目大意: 就是给你一个区间[a,b]让你求这个区间素数的个数 但a.b的值太大没法直接进 ...

  8. Help Hanzo (LightOJ - 1197) 【简单数论】【筛区间质数】

    Help Hanzo (LightOJ - 1197) [简单数论][筛区间质数] 标签: 入门讲座题解 数论 题目描述 Amakusa, the evil spiritual leader has ...

  9. 素数筛 poj 2689

    素数筛 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ...

随机推荐

  1. mysql---多表关联

    首先要介绍一下集合的概念:集合具有无序性.唯一性. 无序性:指集合内部元素没有相对顺序的概念,对于两个集合而言,只要元素值和元素个数相同则两个集合相等. 唯一性:指集合内部元素不存在值相等的元素. 上 ...

  2. 无线WEP入侵注意事项

    1.工具bt3/bt4+spoonwep2(dep安装包)+U盘/VMwmare+无线网卡(可以笔记本内置)+UltraISO+unetbootin-windows-latest.exe+2.内置网卡 ...

  3. js清空web用户控件的值

    假设你的用户控件里面有: <asp:DropDownList ID="DropDownList1" runat="server"> <asp: ...

  4. ajax、json一些整理(2)

    <script type="text/javascript"> $(document).ready(function(){ $("#btn").cl ...

  5. php获取汉字首字母的函数

    本文介绍用php实现汉字转化为首字母的方法,主要功能是:功能明确,易于修改维护和扩展: 英文的字串:不变返回(包括数字):中文字符串:返回拼音首字符: 中英混合串: 返回拼音首字符和英文. 网上的方法 ...

  6. Windows 下Python操作MySQL

    1.环境要求(Win7 X64): python 2.7, MySQL-python-1.2.3.win-amd64-py2.7 :http://www.codegood.com/download/1 ...

  7. HTML meta viewport属性说明

    什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤 到很小的窗口中(这样会破坏没有针对手 ...

  8. SET ANSI_NULLS ON

    Transact-SQL 支持在与空值进行比较时,允许比较运算符返回 TRUE 或 FALSE. 通过设置 ANSI_NULLS OFF 可将此选项激活.当 ANSI_NULLS 为 OFF 时,如果 ...

  9. oracle服务介绍

    按照windows 7 64位 安装oracle 11g R2中的方法成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Ser ...

  10. Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合

    今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...