[蓝桥杯2022初赛] 质因数个数

Posted Tisfy

tags:

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

授权转载于好朋友@m0_68534772的博客https://blog.csdn.net/m0_68534772/article/details/125706319,有兴趣可以去他的OJ系统看看,界面十分优美。

前言

蓝桥杯省赛历年真题已经收录至oj.zhtwinkle.cn,推荐大家到这个OJ去刷蓝桥杯省赛真题

题目链接

[蓝桥杯2022初赛] 质因数个数

题目描述

给定正整数 ,请问有多少个质数是 的约数。

输入格式

输入的第一行包含一个整数 

对于  的评测用例,

对于  的评测用例,

对于所有评测用例,

输出格式

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

输入样例

396

输出样例

3

数据范围与提示

有 ,, 三个质数约数。

分析

该问题基于算数基本定理

对于任意一个正整数 ,可以将它分解成 个质因子的乘积

例如



由此定理可以发现,对于正整数 来说,它的任意一个因数 都是它质因数的乘积

所有因数即是它质因数乘积的各种组合

的因数 ,分解为

由此可以快速的分解出一个数 的所有因数

C++代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll check(ll x)

    ll temp=x,cnt=0;
    for(int i=2;i<=sqrt(temp)&&temp>1;i++)
    
        if(temp%i==0)
            cnt++;
        while(temp%i==0)
        
            temp/=i;
        
    
    if(temp>1)
        cnt++;
    return cnt;

int main()

    ll n;
    cin>>n;
    cout<<check(n)<<endl;
    return 0;

Python代码

n = int(input())
ans = 0
i = 2
while i*i<=n:
    if n%i==0:
        ans+=1
        while n%i==0:
            n//=i
    i+=1
if n>1:
    ans+=1
print(ans)


 

以上是关于[蓝桥杯2022初赛] 质因数个数的主要内容,如果未能解决你的问题,请参考以下文章

LQ0015 质因数个数数论

蓝桥杯省赛真题13python因素个数 青少年组蓝桥杯python编程省赛真题解析

蓝桥杯省赛真题13python因素个数 青少年组蓝桥杯python编程省赛真题解析

蓝桥杯_基础练习《分解质因数---28》

蓝桥杯——算法训练 分解质因数

(蓝桥杯)试题 算法训练 分解质因数