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

来源:互联网 发布:大掌门神龙教主 数据 编辑:程序博客网 时间:2024/04/30 00:02

素因子种类数:

对于一个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,表示函数的一个返回值


0 0
原创粉丝点击