D. Soldier and Number Game
time limit per test

3 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

-> Link <-

题目链接呈上;

题意:两个人玩游戏,其中一个人选一个数n给另外一个人,然后每轮选一个数x使得n能被x整除,然后用n/=x;注意x>1;问要使得另一个人得分最高,最高多少;即最多能够玩几轮n变成了1,为了使游戏更加有趣,给出两个数a,b;n=a!/b!;其中数据范围是500,0000;

思路:我们观察样例,第一组n=3!/1!=6,然后6可以选2或3进行整除,得到的还是2或3,因为这个时候变成了素数再选只能选本身才能整除;所以只有2轮;再看第二组,n=6!/3!=120;所以n=120/2=60/2=30/2=15/3=5/5=1;总共5轮,我们的目的是什么?要使得n尽量多整除几轮,所以每次都选一个最小的素因子来整除,这样所得的分才最高;那么选最小的素因子怎么选呢?我们观察到:6=2*3,120=2*2*2*3*5;明白了吧,这个n的拆分的素因子个数就是最多能整除的轮数,那么我们就是要求出n的素因子个数了,题目数据比较大,直接求得用到高精度,我们来看n是怎么得来的呢?n=a!/b!,题目已表明b<=a,所以n=(b+1)*(b+2)*(b+3)*...*a;,我们只需求出从b+1到a中的素因子个数就是答案了,基于数据太大,所以我们要打表求出
1 - 5000000中每个数的素因子数;

然而比赛的时候想到了一种方法,却疏漏了一点致使成功离我们远去;我们观察到4=2*2,有2个,而8=2*2*2,有三个;再看6=2*3,有2个,12=6*2,有2+1个,所以当时想的方法就是用各个因子的素因子数来累加,来看这种思路代码:

const int N=5000000+10;
int a[N];
int main()
{
memset(a,0,sizeof(a));
for(int i=2; i<=N; i++)
if(!a[i])//就是没考虑到这里,所以以为会超时直接不敢写了...............
{
for(int j=i;j<=N;j+=i)
a[j]=a[j/i]+1;
}
for(int i=2;i<=N;i++)//这里要注意累加,因为查询次数比较多,每次都用循环累加也是会超时的;
a[i]+=a[i-1];
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
printf("%d\n",a[n]-a[m]);
}
return 0;
}

再来看另一种思路打表代码:

const int N=5000000+10;
int a[N];
int main()
{
memset(a,0,sizeof(a));
for(int i=2; i<=N; i++)//这居然也不超时..古凯队长也是叼;;
if(!a[i])
{
long long temp;
for(temp=i;temp<=N;temp*=i)
for(long long j=temp;j<=N;j+=temp)
a[j]++;//这种更好理解一点,直接加上去;
}
for(int i=2;i<=N;i++)
a[i]+=a[i-1];
int t,n,m;
scanf("%d",&t);
while(t--)
{
// scanf("%d",&n);
// printf("%d\n",a[n]);
scanf("%d%d",&n,&m);//其实当n==m时n==1,直接输出0,特判一下省时间;;
printf("%d\n",a[n]-a[m]);
}
return 0;
}

Codeforces Round #304 (Div. 2)-D. Soldier and Number Game,素因子打表,超时哭晕~~的更多相关文章

  1. 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 ...

  2. DP+埃氏筛法 Codeforces Round #304 (Div. 2) D. Soldier and Number Game

    题目传送门 /* 题意:b+1,b+2,...,a 所有数的素数个数和 DP+埃氏筛法:dp[i] 记录i的素数个数和,若i是素数,则为1:否则它可以从一个数乘以素数递推过来 最后改为i之前所有素数个 ...

  3. 数学+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;再来一个前缀和 */ /***************** ...

  4. 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 ...

  5. 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 ...

  6. 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, 问你最多可以操作多少次 ...

  7. queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards

    题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...

  8. 贪心 Codeforces Round #304 (Div. 2) B. Soldier and Badges

    题目传送门 /* 题意:问最少增加多少值使变成递增序列 贪心:排序后,每一个值改为前一个值+1,有可能a[i-1] = a[i] + 1,所以要 >= */ #include <cstdi ...

  9. 水题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas

    题目传送门 /* 水题:ans = (1+2+3+...+n) * k - n,开long long */ #include <cstdio> #include <algorithm ...

随机推荐

  1. (一)python基础学习

    根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...

  2. Python multiprocessing相关疑问

    1. multiprocessing 和 threading有什么区别? threading module并没有真正利用多核.而multiprocessing 利用subprocess避开了pytho ...

  3. [转]C#委托Action、Action<T>、Func<T>、Predicate<T>

    CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...

  4. AJPFX关于static总结

    static 总结 static Fields        static Methods        static member class        static initializer-- ...

  5. uoj #15. 【NOIP2014】生活大爆炸版石头剪刀布

    石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第 8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的石头剪 ...

  6. tomcat添加访问的ip限制

    在如下位置添加如下代码: 代码: <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow=&q ...

  7. Flutter走过的坑(持续更新)

    1 Target of URI doesn't exist 'package:flutter/material.dart' 官方下载的flutter中有一个example文件夹,里面有很多flutte ...

  8. 【JavaScript从入门到精通】第三课

    第三课 初探JavaScript魅力-03 函数传参 上节课的时候我们已经讲了什么是函数,实际上,函数在功能上就类似于css的class一样,将一段代码包裹起来使用.为了让函数的功能更加的丰富和实用, ...

  9. vue解决IOS10低版本白屏问题

    一.方案一 在build文件的webpack.prod.conf.js文件添加以下代码 new UglifyJsPlugin({ uglifyOptions: { compress: { warnin ...

  10. 【Hadoop】一、分布式数据库HBase简介

    1.分布式数据库特点   说到数据库,我们最熟悉的是类似于mysql这样的关系型数据库,称为RDBMS.关系型数据库作为一种数据存储和数据检索的关键技术,它支持SQL语言的结构化查询,但是它天生不是为 ...