51nod 1441 士兵的数字游戏 (模拟线性筛)
2016-01-25 18:19
399 查看
两个士兵正在玩一个游戏,游戏开始的时候,第一个士兵为第二个士兵选一个正整数n。然后第二个士兵要玩尽可能多的轮数。每一轮要选择一个正整数x>1,且n要是x的倍数,然后用n/x去代替n。当n变成1的时候,游戏就结束了,第二个士兵所得的分数就是他玩游戏的轮数。
为了使游戏更加有趣,第一个士兵用 a! / b! 来表示n。k!表示把所有1到k的数字乘起来。
那么第二个士兵所能得到的最大分数是多少呢?
Input
Output
Input示例
Output示例
为了使游戏更加有趣,第一个士兵用 a! / b! 来表示n。k!表示把所有1到k的数字乘起来。
那么第二个士兵所能得到的最大分数是多少呢?
Input
单组测试数据。 第一行包含一个整数t (1 ≤ t ≤ 1,000,000),表示士兵玩游戏的次数。 接下来t行,每行包含两个整数a,b (1 ≤ b ≤ a ≤ 5,000,000)。
Output
对于每一组数据,输出第二个士兵能拿到的最多分数。
Input示例
2 3 1 6 3
Output示例
2 5
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N = 5000000+10; long long a ,pre ; void init() { int n=5000000,i,j; for(i=2;i<=n;i++) { if(!a[i]) { for(j=i;j<=n;j+=i){ int temp=j; while(temp%i==0) { a[j]++; temp=temp/i; } } } pre[i]=pre[i-1]+a[i]; } } int main() { int t,i,j,s,e; scanf("%d",&t); init(); while(t--) { scanf("%d%d",&e,&s); printf("%lld\n",pre[e]-pre[s]); } return 0; }
相关文章推荐
- Convenience initialzer missing a self call to another initializer警告
- web安全
- vim的替换一小记
- 对整形数组进行快速排序
- 用自定义view实现一个抢红包的demo
- 【Unity入门】碰撞检测与触发检测
- ExtJS5 (一) 超简单整合到eclipse中,搭建简单的开发环境
- 5-23 币值转换
- Security
- 改动项目APP名字后,在真机执行报错:The provisioning profile specified in your build settings (“haotian”) has an AppI
- 移动端 iphone touchmove滑到边界(浏览器地址拦及以上) touchend失效解决办法
- ios开发获得屏幕尺寸的一些小问题
- 手写模板引擎
- log4j输出多个自定义日志文件
- HPU15级练习(一)并查集 :C - The Suspects
- 统计某一时间段内的数据
- python UI自动化 splinter
- Jmeter的安装与使用
- 【语音识别】一文搞懂hmm
- sentos6.5关于启动HTTPD的问题与解决方法