题意:给定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. POJ 2186.Popular Cows (强连通)

    强连通缩点,统计入度为1的缩点后的点的个数 个数1的话输出这个强连通分量的点的数量 否则输出0: code /* Kosaraju算法,无向图的强连通分量,时间复杂度O(n+m) 思路: 按照图G的深 ...

  2. ubuntu 升级命令

    apt-get update && apt-get dist-upgrade

  3. Bootstrap_Javascript_按钮插件

    一 . 加载状态按钮 HTML: <button class="btnbtn-primary" data-loading-text="正在加载中,请稍等...&qu ...

  4. Bootstrap_表单_图像

    在Bootstrap框架中对于图像的样式风格提供以下几种风格: 1.img-responsive:响应式图片,主要针对于响应式设计2.img-rounded:圆角图片3.img-circle:圆形图片 ...

  5. Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)

    Centos下安装配置LAMP(Linux+Apache+MySQL+PHP)   关于LAMP的各种知识,还请大家自行百度谷歌,在这里就不详细的介绍了,今天主要是介绍一下在Centos下安装,搭建一 ...

  6. 黑马程序员——利用swap函数研究C的指针

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计3个函数,分别实现已下功能: 交换两个整数 交换两个整形指针 交换任意两个同类型的变量 #i ...

  7. arm-none-eabi-gcc install

    Zephyr除了官方的编译工具,还有第三方工具 arm-none-eabi-gcc . This PPA is an alternative to toolchain released at http ...

  8. HttpClient4.3.6 实现https访问

    package httptest; import java.io.IOException; import java.nio.charset.Charset; import java.security. ...

  9. jQuery Asynchronous

    http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html http:// ...

  10. Tiling

    地址:http://poj.org/problem?id=2506 递推公式::f[x]=f[x-1]+f[x-2]*2 需要用到大数. #include<stdio.h> #includ ...