序列求和(数论)
题意:
学习了约数后,小明对于约数很好奇,他发现,给定一个正整数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
禁止转载。仅用于自己学习。对程序错误不负责。