DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game
/*
题意:b+1,b+2,...,a 所有数的素数个数和
DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1;否则它可以从一个数乘以素数递推过来
最后改为i之前所有素数个数和,那么ans = dp[a] - dp[b];
详细解释:http://blog.csdn.net/catglory/article/details/45932593
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <cmath>
using namespace std; typedef long long ll; const int MAXN = 5e6 + ;
const int INF = 0x3f3f3f3f;
int prime[MAXN];
bool is_prime[MAXN];
ll dp[MAXN]; int seive(void)
{
for (int i=; i<=5e6; ++i) is_prime[i] = true;
is_prime[] = is_prime[] = false;
int p = ;
for (int i=; i<=5e6; ++i)
{
if (is_prime[i])
{
prime[++p] = i;
for (int j=*i; j<=5e6; j+=i) is_prime[j] = false;
}
} return p;
} void solve(void)
{
int p = seive ();
for (int i=; i<=5e6; ++i)
{
if (is_prime[i]) {dp[i] = ; continue;}
for (int j=; j<=p; ++j)
{
if (i % prime[j] == )
{
dp[i] = dp[i/prime[j]] + ; break;
}
}
} for (int i=; i<=5e6; ++i) dp[i] += dp[i-];
} int main(void) //Codeforces Round #304 (Div. 2) D. Soldier and Number Game
{
solve ();
int t; scanf ("%d", &t);
while (t--)
{
int a, b;
scanf ("%d%d", &a, &b);
printf ("%I64d\n", dp[a] - dp[b]);
} return ;
} /*
3
3 1
6 3
5000000 4999995
*/
DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game的更多相关文章
- 数学+DP Codeforces Round #304 (Div. 2) D. Soldier and Number Game
题目传送门 /* 题意:这题就是求b+1到a的因子个数和. 数学+DP:a[i]保存i的最小因子,dp[i] = dp[i/a[i]] +1;再来一个前缀和 */ /***************** ...
- Codeforces Round #304 (Div. 2) D. Soldier and Number Game 数学 质因数个数
D. Soldier and Number Game Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/conte ...
- Codeforces Round #304 (Div. 2) D. Soldier and Number Game 素数打表+质因数分解
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #304 (Div. 2) D - Soldier and Number Game
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #304 (Div. 2)(CF546D) Soldier and Number Game(线性筛)
题意 给你a,b(1<=b<=a<=5000000)表示a!/b!表示的数,你每次可以对这个数除以x(x>1且x为这个数的因子)使他变成a!/b!/x, 问你最多可以操作多少次 ...
- Codeforces Round #304 (Div. 2)-D. Soldier and Number Game,素因子打表,超时哭晕~~
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards
题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...
- 贪心 Codeforces Round #304 (Div. 2) B. Soldier and Badges
题目传送门 /* 题意:问最少增加多少值使变成递增序列 贪心:排序后,每一个值改为前一个值+1,有可能a[i-1] = a[i] + 1,所以要 >= */ #include <cstdi ...
- 水题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas
题目传送门 /* 水题:ans = (1+2+3+...+n) * k - n,开long long */ #include <cstdio> #include <algorithm ...
随机推荐
- ECMAScript学习笔记
1. ECMAScript不存在块级作用域,因此在循环内部定义的变量,在循环外也是可以访问的 eg: var count =10; fpr(var i=0; i<count; i++){ ale ...
- ResultSetMetaData类的介绍
ResultSetMetaData .DatabaseMetaData中的方法介绍 利用ResultSet的getMetaData的方法可以获得ResultSetMeta对象,而ResultSetMe ...
- URL 下载
package URL; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import j ...
- 初探linux子系统集之led子系统(二)【转】
本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37606487 巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一 ...
- HDU1532 Drainage Ditches —— 最大流(sap算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/ ...
- Oracle备份与恢复:冷备份恢复
模拟数据库数据文件丢失的情况下,通过丢失之前的数据文件物理备份做恢复: 说明:数据文件丢失前一刻的所有归档日志都存在. 环境:oracle10g +rhel5 1.关闭数据库,copy system0 ...
- python的日志logging模块性能以及多进程
写在前面: 日志是记录操作的一种好方式.但是日志,基本都是基于文件的,也就是要写到磁盘上的.这时候,磁盘将会成为一个性能瓶颈.对于普通的服务器硬盘(机械磁盘,非固态硬盘),python日志的性能瓶颈是 ...
- linux--安装phpcurl扩展
在UBUNTU中直接用APT包管理工具安装: apt-get install curl libcurl3 libcurl3-dev php5-curl 安装好后重启Apache服务器就行了,如果还是不 ...
- Centos6.5 6.6 (均可) 重置密码或强行破解root密码 简单操作
centos忘记root密码怎么重置root密码? 使用Linux系统的时候root密码是十分关键的安全机制. 但是假设那天丢失了root密码的话问题就严重了. 百牛信息技术bainiu.ltd整理发 ...
- 学习记录:《高性能javascript》【持续更新】
在看这本书的时候,遇到不懂得地方我一般都会百度一下.这里记录一下我在这本书里捡到的杂碎知识: 1.arrayObject.shift() 2.concat() 3.绑定监听的事件的方法(兼容IE,Fi ...