Soldier and Number Game

Time Limit:3000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and gives it to the second soldier. Then the second one tries to make maximum possible number of rounds. Each round consists of choosing a positive integer x > 1, such that n is divisible by x and replacing n with n / x. When n becomes equal to 1 and there is no more possible valid moves the game is over and the score of the second soldier is equal to the number of rounds he performed.

To make the game more interesting, first soldier chooses n of form a! / b! for some positive integer a and b (a ≥ b). Here by k! we denote the factorial of k that is defined as a product of all positive integers not large than k.

What is the maximum possible score of the second soldier?

Input

First line of input consists of single integer t (1 ≤ t ≤ 1 000 000) denoting number of games soldiers play.

Then follow t lines, each contains pair of integers a and b (1 ≤ b ≤ a ≤ 5 000 000) defining the value of n for a game.

Output

For each game output a maximum score that the second soldier can get.

Sample Input

Input
2
3 1
6 3
Output
2
5
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <queue>
#include <map>
#include <stack>
using namespace std; typedef long long LL;
const LL INF = 1 << 31;
const int MAXN = 5000005;
int pri[5000], vis[MAXN], res[MAXN], c = 1;
void getpri()//刷选2500以内的素数, 同时vis[]判断 500w以内的数是否是素数
{
memset(vis, 0, sizeof vis);
vis[0] = vis[1] = 1;
for(int i = 2; i < 2500; ++i) if(!vis[i]) {
pri[c++] = i;
for(int j = i * i; j < MAXN; j += i)
vis[j] = 1;
}
}
int main()
{
int ans, g, flag;
getpri();
res[1] = res[0] = 0;
for(int i = 2; i < MAXN; ++i)
{
g = i;
ans = 0;
if(!vis[i]) ans = 1; //素数的结果不用除, 只有自己本身一个因子
else {
flag = 0;
for(int j = 1; g != 1 && j < c; ++j) { //要想把 500w以内的合数都分解为质数,
                            //只需要一直尝试除于 sqrt(500w)内的质数就好了
//因为对于 一个合数n, 它总有一个 质因子小于或等于 sqrt(n)
while(g % pri[j] == 0) { g /= pri[j]; ans++;
if(!vis[g]) { ans++;flag = 1; break; }//此步必须要有, 在试除的过程中, 若已为质数, 及时推出
//另一方面, 如n = 13 * 11111, 由于只刷选到 2500内的质数, 11111不能检测到
}
if(flag) break;
}
}
res[i] = res[i - 1] + ans;
}
int t, a, b;
scanf("%d", &t);
while(t--)
{
scanf("%d%d", &a, &b);
printf("%d\n", res[a] - res[b]);
}
} 另一种做法是:充分利用已经得到的结果, 如 res[100] = res[2] + res[100 / 2] 其中由于 2 和 50 都小于 100, 故已经算出来了

  

Codeforce 546D的更多相关文章

  1. Codeforce - Street Lamps

    Bahosain is walking in a street of N blocks. Each block is either empty or has one lamp. If there is ...

  2. Codeforce Round #216 Div2

    e,还是写一下这次的codeforce吧...庆祝这个月的开始,看自己有能,b到什么样! cf的第二题,脑抽的交了错两次后过了pretest然后system的挂了..脑子里还有自己要挂的感觉,果然回头 ...

  3. Codeforce 水题报告(2)

    又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...

  4. codeforce 375_2_b_c

    codeforce 375_2 标签: 水题 好久没有打代码,竟然一场比赛两次卡在边界条件上....跪 b.题意很简单...纯模拟就可以了,开始忘记了当字符串结束的时候也要更新两个值,所以就错了 #i ...

  5. codeforce 367dev2_c dp

    codeforce 367dev2_c dp 标签: dp 题意: 你可以通过反转任意字符串,使得所给的所有字符串排列顺序为字典序,每次反转都有一定的代价,问你最小的代价 题解:水水的dp...仔细想 ...

  6. 三维dp&codeforce 369_2_C

    三维dp&codeforce 369_2_C 标签: dp codeforce 369_2_C 题意: 一排树,初始的时候有的有颜色,有的没有颜色,现在给没有颜色的树染色,给出n课树,用m种燃 ...

  7. 强连通分量&hdu_1269&Codeforce 369D

    强连通分量 标签: 图论 算法介绍 还记得割点割边算法吗.回顾一下,tarjan算法,dfs过程中记录当前点的时间戳,并通过它的子节点的low值更新它的low,low值是这个点不通过它的父亲节点最远可 ...

  8. 【树状数组】区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D

    [树状数组]区间出现偶数次数的异或和(区间不同数的异或和)@ codeforce 703 D PROBLEM 题目描述 初始给定n个卡片拍成一排,其中第i个卡片上的数为x[i]. 有q个询问,每次询问 ...

  9. 解题报告:codeforce 7C Line

    codeforce 7C C. Line time limit per test1 second memory limit per test256 megabytes A line on the pl ...

随机推荐

  1. (2016弱校联盟十一专场10.2) A.Nearest Neighbor Search

    题目链接 水题,算一下就行. #include <bits/stdc++.h> using namespace std; typedef long long ll; ll x[],y[], ...

  2. 启动Eclipse弹出:Failed to load JavaHL Library 错误框的解决办法

    一.问题背景描述: eclipse安装完svn插件以后,在启动时出现:Failed to load JavaHL Library.  These are the errors that were en ...

  3. !带有指针的类和struct赋值的本质 - host to device

    //这个变量必须在while循环外面 //原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后 //里面的数值拷贝过去了,而里头的指针只给了地址 //所以如果这个 ...

  4. sqlplus 设置

    set heading offset line 40001.设置页面显示总行数show pagesize; //首先查看目前的pagesize,默认是14set pagesize 100; //将pa ...

  5. SQLServer基本操作

    SQL 全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言 1.分离数据库:将当前数据库文件和数据库引擎的关系断开,没有任何关系了,这样就可以随 ...

  6. Innodb之表空间转移

    我们可以将数据表转移到其他磁盘,以减弱单个磁盘的IO. 如 1创建一个表空间: 2修改表以使用新的表空间,如果表有大量数据,则会需要一些时间重建:所以会锁表一段时间: Note:会将原有的表空间删除, ...

  7. Mysql 删除语句

    手册: 14.2.2 DELETE Syntax 单表删除语句:DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (par ...

  8. iosTest

    NSString * url = @"http://192.168.0.11:8000/InterfaceApp/Login?UserName=15995858188&Passwor ...

  9. iOS - 日期的时间差(某年某月某日的某一天。。。)

    //首先创建格式化对象 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateF ...

  10. Android Tab -- 使用TabWidget、TabHost、TabActivity来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 TabActivity在API13之后被fragment替代了,所以不建议使用 ...