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
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))
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
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