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

算素因子种类数个个数的题目

时间:2015-06-14 01:53:20      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:算法   codeforces   

素因子种类数:

对于一个n,他的素因子总类数 有多少? Facebook Hackercup Round1 Homework题,10pts


运用筛法,然后P[j]=i ->P[j]++


int GetPrimeFactorTypeTimes(int n)
{
    memset(P , 0, sizeof P);
    for(int i=2;2*i<=n;i++)
    {
        if(!P[i])
        {
            for(int j=2*i;j<=n;j+=i) P[j]++;
        }
    }
    return P[n];
}



素因子种类数:


对于一个n,他的素因子总个数 有多少?CodeForces http://codeforces.com/contest/546/problem/D


先筛法算每个j的一个素因子,只要存任意一个就行,然后dp一下,运用分治的思想,解决子问题,然后递推上来就好了


LL dp[maxn], P[maxn], Sum[maxn], n, t, m, a, b;

void Init()
{
    memset(P, 0, sizeof P);
    P[1]=1;
    for(LL i=2;i*i<=maxn;i++)
    {
        if(!P[i])
        {
            for(LL j=i*i;j<=maxn;j+=i)
                P[j]=i;
        }
    }
    dp[1]=dp[2]=dp[3]=1;
	for(LL i=2;i<=maxn;i++)
		dp[i]= (P[i] ? (dp[i/P[i]]+1) : 1);
	Sum[0]=0;
	for(LL i=1;i<=maxn;i++) Sum[i]=Sum[i-1]+dp[i];
}
int main()
{
/*
#ifndef ONLINE_JUDGE
    freopen ("in.txt" , "r" , stdin);
    freopen ("out.txt" , "w" , stdout);
#endif
*/
    Init();
    t=getint();
    for(int ti=1;ti<=t;ti++)
    {
        a=getint(), b=getint();
		printf("%d\n", Sum[a]-Sum[b]);
    }
	return 0;
}

算因子个数呢?

暴力枚举,从1->sqrt(n), 或者质因子分解,然后每个幂次+1累乘就好了。

文件结束标志EOF,windows下ctrl+z是结束,Linux只是-1,表示函数的一个返回值


算素因子种类数个个数的题目

标签:算法   codeforces   

原文地址:http://blog.csdn.net/richardzrc/article/details/46487269

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