2020年第十一届蓝桥杯决赛Python组(真题+解析+代码):阶乘约数

1 真题

2020年第十一届蓝桥杯决赛Python组(真题+解析+代码):阶乘约数_第1张图片


2 解析

难度系数:⭐⭐

考察题型:数论

涉及知识点:约数定理

思路分析:

一开始我是想着直接分解因数,结果100!的时间复杂度实在太大。

所以这道题只能靠巧取解决。搬出适合本题的工具↓

质数-唯一分解公式

质数有2、3、5、7、11、13······

比如18=2*3*3(p1=2,a1=1;p2=3,a2=2)

约数个数=(a1+1)(a2+1)=(1+1)(2+1)=6  (分别是:1,2,3,6,9,18)


3 代码

#1.创建1~100的质数集
def prime(x):
    for i in range(2,int(x**0.5)+1):
        if x%i==0:
            return False
    return True
zhishu=[i for i in range(2,101) if prime(i)==True]
#zhishu=[2,3,5,7,11···,97]
        
#2.计算约数个数
a=[0]*100                #创建计数数组
for i in range(1,101):   #遍历1~100
    x=i                  #当前变量赋值
    for j in zhishu:     #遍历质数数组
        while x%j==0:    #判断约数
            a[j]+=1      #对应计数+1
            x//=j        #循环条件
#a=[0, 0, 97···0,0]
a=[i for i in a if a!=0]
#[97, 48, 24, 16···]

#3.遍历结果
ans=1
for i in a:
    ans*=i+1             #唯一分解定理公式
print(ans)               #39001250856960000

               


      我写的是关于蓝桥杯的系列题解,感谢关注我的朋友们,我会持续输出高质量文章 
蓝桥杯python组十一届决赛真题+解析+代码(通俗易懂版)_编程有了思路-CSDN博客小蓝特别喜欢2,今年是公元2020年,他特别高兴。他很好奇,在公元1年到公元2020年(包含)中,有多少个年份的数位中包含数字2?一个数如果除了1和自己还有其他约数,则称为一个合数。例如:1,2,3不是合数,4,6是合数。定义阶乘n!=1×2×3x...xn。请问100!(100的阶乘)有多少个正约数。小蓝特别喜欢单调递增的事物。https://blog.csdn.net/m0_55148406/article/details/122863206?spm=1001.2014.3001.5502

你可能感兴趣的:(蓝桥杯,python,职场和发展,算法)