关闭

CodeForces 546D (求素因子个数)

2707人阅读 评论(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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:443842次
    • 积分:10528
    • 等级:
    • 排名:第1560名
    • 原创:532篇
    • 转载:25篇
    • 译文:75篇
    • 评论:90条
    自我简介
    nyist计科13级本科,bjtu17级在读硕士,喜爱算法,热爱编程,欢迎一起学习交流。
    博客专栏