LQ0015 质因数个数数论

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0015 质因数个数数论相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2022初赛

题目描述
给定正整数n,请问有多少个质数是n的约数。

输入格式
输入的第一行包含一个整数n。
对于30% 的评测用例,1≤n≤10000。
对于60% 的评测用例,1≤n≤10^9。
对于所有评测用例,1≤n≤10^16。

输出格式
输出一个整数,表示n 的质数约数个数。

输入样例
396

输出样例
3

数据范围与提示
396 有2, 3, 11 三个质数约数。

问题分析
用试除法来实现质数因子的分解。
为了提高速度,质数2单独考虑,大致可以减少一半的时间。
然后,用3开始的奇数去试除。

程序说明
对于除以已知因子后的n,用条件"i <= sqrt(n)"来限制试除的范围,即只用小因子来试除,可以减少计算量,没有这个条件则会超时。剩下的超过n平方根的大因子直接计数。

AC的C语言程序如下:

/* LQ0015 质因数个数 */

#include <stdio.h>
#include <math.h>

typedef long long ll;

int main()

    long long n;
    int cnt = 0;

    scanf("%lld", &n);

    if (n % 2 == 0) 
        cnt++;
        while (n % 2 == 0)
            n /= 2;
    
    for (int i = 3; i <= sqrt(n) && n > 1LL; i += 2)
        if (n % i == 0) 
            cnt++;
            while (n % i == 0)
                n /= i;
        
    if (n > 1) cnt++;

    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0015 质因数个数数论的主要内容,如果未能解决你的问题,请参考以下文章

LQ0147 因数平方和数论

数论杂记——约数个数定理

算法竞赛模板(数论)

数论考试题(b) 求约数的约数的最大个数

LeetCode数论题目总结

POJ 3421 X-factor Chains | 数论