题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数。

题解:典型的筛选法求素数。首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数因子个数为k的二维数组sumNum[n][k]。

factorNum能够由筛选法确定。初始化数组为0。

1. 从小到大遍历给定最大范围内的数,若遍历到数n时,factorNum[n]=0则说明这个数是素数(前面没有它的因子)。

2. 然后通过添加n的倍数,来筛选出最大范围内含有素数因子n的数。

sumNum能够由简单的dp确定:

- 若factorNum[n] = k,则sumNum[n][k] = sumNum[n-1][k]+1。

- 对于其它k,sumNum[n][k] = sumNum[n-1][k]。

代码例如以下:

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. #define maxN 10000005
  6. short factorNum[maxN];
  7. int sumNum[maxN][9];
  8. short maxFactorNum;
  9. int generateFactorNum()
  10. {
  11. memset(factorNum,0,sizeof(factorNum));
  12. memset(sumNum,0,sizeof(sumNum));
  13. maxFactorNum = -1;
  14. for(int i = 2;i < maxN;i++)
  15. {
  16. if(factorNum[i] == 0)
  17. {
  18. factorNum[i] = 1;
  19. for(int k = 2;k*i < maxN;k++)
  20. {
  21. factorNum[k*i]++;
  22. }
  23. }
  24. memcpy(sumNum[i],sumNum[i-1],sizeof(int)*9);
  25. sumNum[i][factorNum[i]]++;
  26. maxFactorNum = max(maxFactorNum,factorNum[i]);
  27. }
  28. return 0;
  29. }
  30. int main()
  31. {
  32. freopen("homework.txt","r",stdin);
  33. freopen("out1.txt","w",stdout);
  34. int T;
  35. int A,B,K;
  36. scanf("%d",&T);
  37. generateFactorNum();
  38. for(int i = 1;i <= T;i++)
  39. {
  40. scanf("%d%d%d",&A,&B,&K);
  41. printf("Case #%d: ",i);
  42. if(K > maxFactorNum)
  43. {
  44. printf("0\n");
  45. }
  46. else
  47. {
  48. printf("%d\n",sumNum[B][K]-sumNum[A-1][K]);
  49. }
  50. }
  51. return 0;
  52. }

Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)的更多相关文章

  1. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)

    原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意 ...

  2. Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)

    原题:pid=688426044611322&round=344496159068801">https://www.facebook.com/hackercup/problem ...

  3. poj3006 筛选法求素数模板(数论)

    POJ:3006 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. 筛选法求素数的大概思路是: 如果a这个数是一个质数,则n*a不是质数. 用一个数组实现就是 ...

  4. PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数

    PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...

  5. java筛选法求素数

    这本身没什么,代码一堆 发来纪念下而已 本来刚学习java,编写输出100以内的素数 对于我这个有代码运行性能洁癖的人(但是本身又不懂算法)来说,不能忍 于是看了些资料 参考: http://blog ...

  6. ny24 素数距离的问题 筛选法求素数

    素数距离问题时间限制:3000 ms  |  内存限制:65535 KB难度:2 描述    现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素 ...

  7. ny520 最大素因子 筛选法求素数

    最大素因子时间限制:1000 ms  |  内存限制:65535 KB难度:2 描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序 ...

  8. 筛选法求N以内的所有素数

    素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 ]; int mai ...

  9. Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告

    Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...

随机推荐

  1. Js设置所有连接是触发/swt/的代码

    Js设置所有连接是触发/swt/的代码 代码为: <script> var doca=document.getElementsByTagName('a'); for(var i=0;i&l ...

  2. PHP 关于MongoDB的操作

    <?php header("Content-type:text/html;charset=utf-8"); $m = new MongoClient(); // 连接 $db ...

  3. 原生Js获取某个节点后面的第一个标签

    nextSlbling属性 获取某个节点后面的第一个节点(可能是标签 文本) 判断获取的节点是否为标签节点还是文本节点 window.onload=function(){ var pagecount= ...

  4. Swiper的简单实用方法

    最近项目中有用到一个非常强大的组件idangerous.swiper.js的组件,这个组件能够实现幻灯片的播放效果,而且有各种3D效果,大家可以去试一下,效果很不错的说! 这是这个项目的api文档:h ...

  5. IOS--UIImageView的使用方法

    IOS--UIImageView的使用方法 //初始化 UIImageView  *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(10 ...

  6. iOS类别(Category)与扩展(Extension)-b

    苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最大程度的体现了Objective-C的动态语言特性. #im ...

  7. Windows系统下的TCP参数优化

    1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用.特定数据包以及超时等,具体状态如下所示: CLOSED:初始状态, ...

  8. Java 可视化垃圾回收

    基础 当谈到释放不再使用的内存,垃圾回收已经在很大程度上取代了早期技术,比如手动内存管理和引用计数. 这是件好事,因为内存管理令人厌烦,学究式地簿记是计算机擅长的,而不是人擅长的.在这方面,语言的运行 ...

  9. cf B Bear and Strings

    题意:给你一个字符串,然后找多少区间内含有“bear”,输出数目: #include <cstdio> #include <cstring> #include <algo ...

  10. AOP小结

    AOP主要采用代理模式来实现的,静态代理(设计模式中的代理模式),动态代理(反射机制,实现InvocationHandler接口),cglib实现(采用继承方式,针对目标类生成子类,并覆盖方法进行增强 ...