码迷,mamicode.com
首页 > 其他好文 > 详细

CodeForces 546D (求素因子个数)

时间:2016-06-02 13:57:53      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:


/*****************************
   CodeForces 546D
   Author:herongwei
   Created Time: 2016/5/31 13:00:00
   File Name   : main.cpp
给出一个n,n开始是a!/b!,每次用一个x去整除n得到新的n,
最后当n变成1的时候经过了几轮得分就是这个轮数,
要求最大的分数是多少
[solve]
就是一个求整数质因子个数的题目,
阶乘我们不需要算,我们知道在a>b的时候,
b!都约掉了,那么我们只需计算出每个数的质因数有几个,
然后前缀和计算出1~n的质因子之和,
Input
2
3 1
6 3
Output
2
5
*****************************/

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int maxn = 5e6+10;

LL n,m,dp[maxn];

void init()
{
    dp[1]=dp[2]=0;
    for(int i=2; i<maxn; ++i)
    {
        if(!dp[i])
        {
            for(int j=i; j<maxn; j+=i)
            {
                dp[j]=dp[j/i]+1;
            }
        }
    }
    for(int i=2; i<maxn; ++i)
       dp[i]=dp[i]+dp[i-1];
}
int main()
{

    //freopen("1.txt","r",stdin);
    init();
    /*for(int i=0; i<10; ++i)
    {
        cout<<"i= "<<i<<" "<<dp[i]<<endl;
        i= 0 0
        i= 1 0
        i= 2 1
        i= 3 1
        i= 4 2
        i= 5 1
        i= 6 2
        i= 7 1
        i= 8 3
        i= 9 2
    }
    */
    int t;scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        printf("%I64d\n",dp[n]-dp[m]);
    }
    return 0;
}

CodeForces 546D (求素因子个数)

标签:

原文地址:http://blog.csdn.net/u013050857/article/details/51554192

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!