java中序列求和_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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值