题意:给定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]。

代码例如以下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxN 10000005 short factorNum[maxN];
int sumNum[maxN][9];
short maxFactorNum; int generateFactorNum()
{
memset(factorNum,0,sizeof(factorNum));
memset(sumNum,0,sizeof(sumNum));
maxFactorNum = -1;
for(int i = 2;i < maxN;i++)
{
if(factorNum[i] == 0)
{
factorNum[i] = 1;
for(int k = 2;k*i < maxN;k++)
{
factorNum[k*i]++;
}
}
memcpy(sumNum[i],sumNum[i-1],sizeof(int)*9);
sumNum[i][factorNum[i]]++;
maxFactorNum = max(maxFactorNum,factorNum[i]);
}
return 0;
} int main()
{
freopen("homework.txt","r",stdin);
freopen("out1.txt","w",stdout);
int T;
int A,B,K;
scanf("%d",&T);
generateFactorNum();
for(int i = 1;i <= T;i++)
{
scanf("%d%d%d",&A,&B,&K);
printf("Case #%d: ",i);
if(K > maxFactorNum)
{
printf("0\n");
}
else
{
printf("%d\n",sumNum[B][K]-sumNum[A-1][K]);
}
}
return 0;
}

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. 【SPOJ839】最优标号

    [题目描述] 给你一张无向图G(V,E).每个顶点都有一个标号,它是一个[0,2^31-1]内的整数.不同的顶点可能会有相同的标号. 对每条边(u,v),我们定义其费用cost(u,v)为u的标号与v ...

  2. 【实习记】2014-08-10(上)代码跟踪git的想法+归并排序的debug过程

        (冒泡,选择,插入,希尔,快速,归并,堆排)周末加班学习C++,打算用C++写七大经典排序代码.发现3个月前自己写的七大经典排序代码(C Language)突然运行出错. Makefile内容 ...

  3. jQuery常用技巧大放送

    1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...

  4. [jQuery编程挑战]007 切换数据表格的行列

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8&quo ...

  5. PHP获取每月第一天与最后一天

    <?phpfunction getthemonth($date){$firstday = date('Y-m-01', strtotime($date));$lastday = date('Y- ...

  6. Spring Data JPA 多个实体类表联合视图查询

    Spring Data JPA 查询数据库时,如果两个表有关联,那么就设个外键,在查询的时候用Specification创建Join 查询便可.但是只支持左连接,不支持右连接,虽说左右连接反过来就能实 ...

  7. winform布局格式

    一.默认布局 ★可以加panel,也可以不加: ★通过鼠标拖动控件的方式,根据自己的想法布局.拖动控件的过程中,会有对齐的线,方便操作: ★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整 ...

  8. UnixODBC

    UnixODBC下载安装地址:http://www.unixodbc.org/ DOWNLOAD Distribution Format unixODBC is currently availible ...

  9. c# appdomain

    http://www.cnblogs.com/Terrylee/archive/2005/11/28/285809.html

  10. unity3d中的http通信 二

    转载自 http://www.cnblogs.com/88999660/archive/2013/03/11/2954279.html 如果侵权,请及时通知我删除! using System; usi ...