• 51Nod-1441 士兵的数字游戏


    题目要求是求出a!/b!(a>=b)的结果,让其不断做除法,最多能做多少次。这个问题首先可以转化为求a!中所有质因子个数-b!中所有质因子个数。以前做过一道快速求某个阶乘对一个素数的因子个数的题(http://www.cnblogs.com/LukeStepByStep/p/5889679.html),然后就跑偏了,怎么写都得遍历素数表。后来发现,对于枚举所有素数,可以在生成素数表的过程中把每个数对于所有素数的因子个数求出来。然后a!的素数因子个数又可以通过前缀和来表示,这个问题就变得简单了。

    教训啊,有些问题稍微变动一下,最优解的思路都是不同的,要灵活变通。

    #include <iostream>
    #include <vector>
    using namespace std;
    bool ps[5000005];
    int pre[5000005];
    vector<int> su;
    int cal(int j,int i)
    {
        int cnt=0;
        int temp=j;
        while(j%i==0)
            cnt++,j/=i;
    
        return cnt;
    }
    int main()
    {
        cin.sync_with_stdio(false);
        int t;
        fill(ps,ps+5000005,true);
        fill(pre,pre+5000005,0);
        for(int i=2;i<5000005;i++)
        {
            if(ps[i])
            {
                pre[i]=1;
                su.push_back(i);
                for(int j=i*2;j<5000005;j+=i)
                {
    
                    pre[j]+=cal(j,i),ps[j]=false;
    
                }
    
            }
        }
        //cout<<pre[6]<<endl;
        pre[0]=pre[1]=0;
        for(int i=3;i<5000005;i++)
            pre[i]+=pre[i-1];
        cin>>t;
    
        while(t--)
        {
            int a;
            int b;
            cin>>a>>b;
            cout<<pre[a]-pre[b]<<endl;
            //cout<<p2<<endl;
        }
        return 0;
    }
  • 相关阅读:
    深圳成为全球第一个100%电动公共汽车的城市
    layui 数据表格按钮事件绑定和渲染
    Layui 改变数据表格样式覆盖
    js 遍历删除数组
    layui 数据表格最简单的点击事件
    layui 数据表格使用
    Layui 解决动态图标不动的问题
    Js 改变时间格式输出格式
    PHP 面向对象的数据库操作
    PHP SQL预处理
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/7026571.html
Copyright © 2020-2023  润新知