zoukankan      html  css  js  c++  java
  • Codefo 546D. Soldier and Number Game

    题目链接:http://codeforces.com/problemset/problem/546/D

    题意:输入a,b,n=a!/b!,求n 最多除以多少次变为1。

    分析:相当于求n有多少个质因子。即求从b+1到a之间的数字质因子和为多少。

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    int v[5000005];//v[i]记录i是否为质数
    int prime[50000];//素数表
    int num;
    int mini[5000005];//mini[i]表示i的最小质因子。
    int ans[5000005];//ans[i]表示i有多少个质因子。
    int answer[5000005];//answer[i]表示从1到i共有多少个质因子
    
    void init()
    {
        memset(v,0,sizeof(v));
        num=0;
        for(int i=2;i<=5000000;i++)
            mini[i]=i;
        for(int i=2;i<=5000000;i++)
        {
            if(v[i]==0)
            {
                prime[++num]=i;
            }
            for(int j=1;j<=num&&i*prime[j]<=5000000;j++)
            {
                int t=i*prime[j];
                v[t]=1;
                if(mini[t]>prime[j])
                    mini[t]=prime[j];
            }
        }
        ans[2]=1;
        for(int i=3;i<=5000000;i++)
        {
            ans[i]=ans[i/mini[i]]+1;//ans[i]为i除以他的最小质因子的质因子数加上1
        }
        answer[1]=0;
        for(int i=2;i<=5000000;i++)
        {
            answer[i]=answer[i-1]+ans[i];
        }
    }
    
    
    
    int main()
    {
        int t,a,b;
        scanf("%d",&t);
        init();
        while(t--)
        {
            scanf("%d%d",&a,&b);
            printf("%d
    ",answer[a]-answer[b]);
        }
    
        return 0;
    }
  • 相关阅读:
    工厂模式
    将博客搬至CSDN
    网络安全-跨站脚本攻击XSS(Cross-Site Scripting)
    Linux 权限
    git常用的语句
    git代码提交与克隆
    git学习
    Mybatis常见问题
    关于集合常见的问题
    远程连接(加密验证问题解决)
  • 原文地址:https://www.cnblogs.com/mengzhong/p/5003237.html
Copyright © 2011-2022 走看看