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 质因数个数数论的主要内容,如果未能解决你的问题,请参考以下文章