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

本文探讨了如何计算一个数n的素因子种类数,涉及Facebook Hackercup Round1的题目。通过筛法和动态规划的方法,可以解决此类问题。此外,还提及了CodeForces上的相关问题,以及暴力枚举和质因子分解的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

素因子种类数:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值