sad


私信TA

用户名:dotcpp0636157

访问量:790

签 名:

等  级
排  名 2415
经  验 2317
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校 asd
专  业

  自我简介:

TA的其他文章

最多约数问题
浏览:102
核电站问题
浏览:30

解题思路:
很难受这个题我写不出能AC的代码,一部分是因为PYTHON的特性,一部分是我太菜了,下方这个代码是我学习仿照C++栏中CtrlCV工程师老哥的代码,这个

思路我是完全想不到,勉强看懂了自己恐怕也写不出来,有没有大佬还能优化以下代码让我效率高一点,别超时了,万一比赛时遇到此类情况咋办啊,哭死。

注意事项:

参考代码:


a,b=map(int,input().split())
f = [0]*(5000001)#默认最小质因数的幂数为0
prime = [0]*(5000001)#质数数组
div = [0]*(5000001)#约数数量
ans = 1
t=0
for i in range(2,(b+1)):
   if not f[i] :#如果为质数,则将其添加进质数数组并将f赋为2,约数数量为1和本身,即为2
       t+=1
       prime[t]=i
       f[i]=2
       div[i]=2
   for j in range(1,t+1):#此处原理来自欧式筛法,即利用各个质数将其与其他数的乘积设为合数(欧式筛法确保每个数值被处理一次,无浪费)
       if i*prime[j]>b:
           break
       if(i%prime[j]==0):#若该质数为i的最小质因数,则进行以下处理
           f[i*prime[j]]=f[i]+1#f[i*prime[j]]为最小质因数的幂f[i]+1
           #print('f[%d*%d]=f[%d]+1'% (i , prime[j],i))
           div[i*prime[j]]=div[i]/f[i]*f[i*prime[j]]#公式为div(b)=div(a)/(a的最小质因数幂数+1)*(a的最小质因数幂数+2)
           break
       else:
           f[i * prime[j]] = 2#最小质因数的次方+1
           #print('f[%d*%d]=2' % (i, prime[j]))
           div[i * prime[j]] = div[i] * 2#对于div[i * prime[j]] 与div[i],其共同最小质因数实际为prime[j],可以观察到[i]中并不包含
           #v[i * prime[j]]中的prime[j],而prime[j]又是最小质因子,因此i的prime[j]的幂数为0,i * prime[j]的幂数为1,
           # 再根据公式统一+1。因此此处固定为2

   if(i>=a):ans=max(ans,div[i])
print(int(ans))


 

0.0分

1 人评分

  评论区

  • «
  • »