10届国赛java试题 D: 序列求和

序列求和


题意:
学习了约数后,小明对于约数很好奇,他发现,给定一个正整数t,总是可以找到含有t个约数的整数。小明对于含有t个约数的最小数非常感兴趣,并把它定义为St。
例如S1=1,S2=2,S3 =4,S4=6,……。
现在小明想知道,当t = 100时,St是多少?

思路:
我们可以先把100000以内的质数统计出来,然后在用数论的知识把一个数的约数求出来,我们把一个数的分解质因数算出来然后把质因数的指数加1然后和另外一个质因数的指数加1相乘就可以得出这个约数的解了。
比如:
6的分解质因数就是23 然后在2的指数为(1+1)(1+1)3的指数 所以6的约数就是4
然后我们在for遍历一直找到最近的100约数就可以了。答案:45360
程序:

def z(a):  #判断质数
    if a==2 or a==3:
        return 1
    if a%2==0  or a==1:
        return 0
    k=1
    while k*k<=a:
        k+=2
        if a%k==0:
            return 0
    return 1
b=[]
for p in range(2,100000):
    if z(p):
        b.append(p)
def yu(a):  #a的约数有多少
    s=[]
    i=0
    k=1
    while a!=1:
        if a%b[i]==0:
            a=a//b[i]
            s.append(str(b[i]))
            if z(a):
                s.append(str(a))
                break
        else:
            i+=1
    s1=set(s)
    for i in s1:
        k*=s.count(i)+1
    return k
c=0
while 1:
    c+=1
    if 100==yu(c):
        print(c)
        break

禁止转载。仅用于自己学习。对程序错误不负责。

猜你喜欢

转载自blog.csdn.net/weixin_46640345/article/details/112967804