Exemple #1
0
def sm1(n):
 r = RNG(1,2)
 r_last = RNG(1,2)
 while r.num_els()<n:
  r_last = r
  r = r.deepen(1)
 r = r_last
 nels = r.num_els()
 s = r.sum_els()
 while True:
  if nels==n:
   return s
  d = len(r.end_list)
  for i in xrange(d+1):
   if not i:
    nr = RNG(r.b,r.b+1,r.end_list[i:])
   elif i==d:
    s+=lin_sum(r.end_list[i-1]+n-nels-1) -lin_sum(r.end_list[i-1]-1)
    print s
    return s
   else:
    nr = RNG(r.end_list[i-1],r.end_list[i-1]+1,r.end_list[i:])
   if nels+nr.num_els() <= n:
    nels += nr.num_els()
    s += nr.sum_els()
    r = nr
    break
 print s
 return s
Exemple #2
0
def sum_isqrt(a,b):
 """
 Returns the sum of the integer part of sqrt(i) for i in xrange(a,b)
 But this is O(log(b)) (for the isqrt computation)
 a and b are positive integers, b > a.
 """
 ia,ib = isqrt(a),isqrt(b)
 if ia==ib:
  return ia*(b-a)
 return ia*((ia+1)**2-a) + ib*(b-(ib)**2) + lin_sum(ib-1)-lin_sum(ia) + 2*(square_sum(ib-1)-square_sum(ia))
Exemple #3
0
def solve(n):
  """
  Solve PE problem 325 for n.
  """
  tot = 0
  fibs = pe.fibb(n)
  print zip(fibs[1:-1], fibs[2:])
  cands = set()
  phi = (5**.5+1)/2
  for x in xrange(1,n+1):
    fl = int(x/phi)
#    tot += x*(x-fl-1) + (x*(x-1)-(fl)*(fl+1)) / 2
    tot += x*(-fl) + (-(fl)*(fl+1)) / 2

        #   for f1, f2 in zip(fibs[1:-1], fibs[2:]):
        #       if abs(f2*y-f1*x) == pe.gcd(x,y):
        #           cands.add((x,y))

  return tot + 3*pe.square_sum(n)/2 + pe.lin_sum(n)/2
Exemple #4
0
 def sum_els(self):
  s = lin_sum(self.b-1)-lin_sum(self.a-1)
  for i,el in enumerate(self.start_list):
    s += lin_sum(el+self.chil[i+1]-1)-lin_sum(el-1)
  return s