как улучшить скорость вывода моего кода - PullRequest
0 голосов
/ 25 марта 2020

Привет, мой код занимает слишком много времени и не дает ответа. мой код выдает ответ для gh в диапазоне (10 4) и диапазоне (10 5), но для более высоких диапазонов требуется много времени.

пожалуйста, не могли бы вы выяснить, что не так с кодом , спасибо.f

вам не нужно читать эту часть, она объясняет код. Этот код должен найти сильное число Ахиллеса. В коде я импортировал всю совершенную мощность и превратил их в 0 и go, избавляя от нулевых значений в коде. Я нахожу значения, которые можно делить на 2, 3 и 5 без остатка. код возвращает s = 1/2, если он делится на 2, m = 1/3, если он делится на 3, и n = 1/5, если он делится на 5. Значения будут умножены вместе для получения g, который эквивалентен значению φ (tl). (tl = vl [i], если tl = 864, g = φ (tl) = 288). a будет длиной значений j, k и h, r вычеркнет все нули в a. если минимальное значение в r больше или равно 2, то hjj = vl [i], ty + = [hjj]. TMl = [fj [i] для i, vl_ele в перечислении (vl), если vl_ele в ty] (имеется в виду, если vl [i] = 864, TMl = 288).

Значения TMl делятся на 2, 3 и 5 без остатка возвращает v = 1/2, если делится на 2, p = 1/3, если делится на 3, и c = 1/5, если делится на 5. Значения будут умножены вместе для получения f, который эквивалентен к значению φ (tl) (tl = vl [i], если tl = 864, g = φ (tl) = 288). l будет длиной значений t, o и c, r вычеркнет все нули в l. если минимальное значение в u больше или равно 2, tcount = mount и scount + = [tcount]. Масштаб должен быть на 656 ниже 10 ^ 8

stm = []
FF = []
ty = []
scount= []
from sympy import perfect_power

for gh in range(865):
    inj = perfect_power(gh)
    #print(i)
    if inj== False:
       Try= gh
       stm += [Try]
    else:
       Try = 0
       stm += [Try]
vl= list(filter(lambda nn: nn!=0,stm))

fj = []
jns = []
vcount = []
for i in range(len(vl)):
    tl = vl[i]
   # tl = i
    h = []
    k = []
    j = []
    rl = []
    hq = []
    hm = []

    ll = 1
    remain = 1
    s = 0
    m=0
    n= 0
    nw = 0
    nt = 0
    while tl > 1:


      if tl%2 == 0:
         remain = tl/2
         tl = remain
         j += [tl]
         s = 1/2


      elif tl%3 == 0:
       remain  = tl/3
       tl = remain
       k += [tl]
       m = 1/3

      elif tl%5 == 0:
       remain  = tl/5
       tl = remain
       h += [tl]  
       n = 1/5

      #elif tl%7 == 0:
       #remain  = tl/7
       #tl = remain
       #hq += [tl]  
       #nw = 1/7

      #elif tl%11 == 0:
       #remain  = tl/11
       #tl = remain
      #hm += [tl]  
      #nt = 1/11

      else: 
       ll = 0
       break

    g = (((2**(len(j)))*(1-(s)))*((3**(len(k)))*(1-(m))) *(( 5**(len(h)))*(1-(n))) *((7**(len(hq)))*(1-(nw)))*((11**(len(hm)))*(1-(nt))))*ll
    print(g)


    q = int(round(g))
    fj += [q]
    TT = list(filter(lambda nn: nn!=0,fj))
    a = [len(j)*ll,len(k)*ll,len(h)*ll,len(hq)*ll,len(hm)*ll]

    if max(a) > 0:
       jn = a
       r = list(filter(lambda nn: nn!=0,jn))
       #jns += [r]


       if min(r) >= 2:
            count = 1
            rcount = count
            vcount +=[rcount]
            hjj = vl[i]
            ty +=[hjj]
       else:
            count = 0
            rcount = count
            vcount += [rcount]
#print(len(vl))
#print(len(fj))
TMl = [fj[i] for i, vl_ele in enumerate(vl) if vl_ele in ty]
#print(TMl)
  #print(len(ty))
#print(sum(vcount))
#print(ty)
mtm = []
for gtm in range(len(TMl)):
    bnj = perfect_power(TMl[gtm])
    #print(i)
    if bnj== False:
       bry= TMl[gtm]
       mtm += [bry]
    else:
       bry = 0
       mtm += [bry]
#print(mtm)
vln= list(filter(lambda nn: nn!=0,mtm))
for i in range(len(vln)):


    TM = vln[i]    
    fp = 1
    t = []
    o = []
    c = []
    cp = []
    cg = []
    v=0
    p=0
    d=0
    nj = 0
    ij = 0

    while TM>1:

          if   TM%2 == 0:
               rem = TM/2
               TM = rem
               t += [TM]
               v = 1/2


          elif TM%3 == 0:
               rem  = TM/3
               TM = rem
               o += [TM]
               p = 1/3

          elif TM%5 == 0:
               rem  = TM/5
               TM = rem
               c += [TM]  
               d = 1/5

          #elif tl%7 == 0:
               #remain  = tl/7
               #tl = remain
               #cg += [tl]  
               #nj = 1/7

          #elif tl%11 == 0:
               #remain  = tl/11
               #tl = remain
               #cp += [tl]  
               #ij = 1/11    

          else:
               fp = 0
               break

          #else:
         #print('another no')  



    e = (2**(len(t)) * 3**(len(o)) * 5**(len(c)))*fp#*7**(len(cg))*11**(len(cp)))
    f = e*(1-(v))*(1-(p))*(1-(d))#"""*(1-(nj))*(1-(ij))"""
    w = int(round(f))
    l = [len(t),len(o),len(c),len(cg),len(cp)]




    #print(l)
    if max(l) > 0:
       px = l
       u = list(filter(lambda nn: nn!=0,px))
       #print(u)   



       if min(u) >= 2:
            mount = 1
            tcount = mount
            scount +=[tcount]
       else:
            mount = 0
            tcount = mount
            scount += [tcount]
print(sum(scount))  
...