Example #1
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))
Example #2
0
def checkz(z,p):
 global k
 if p <0:
  return checkz(1/z,-p)
 elif p == 2:
  a,b = isqrt(z.numerator),isqrt(z.denominator)
  if a*a == z.numerator and b*b == z.denominator:
    return checkz(Fraction(a,b),1)
  else:
   return None
 elif p ==1:
  if z.denominator <= k and z < 1:
   return z
Example #3
0
def convergents_sqrt_approx(n,bound=10**12):
  R = isqrt(n)
  if R*R == n:
    return (R,1)
  h = R
  k = 1
  h1 = 1
  h2 = 0
  k1 = 0
  k2 = 1
  P = 0
  Q = 1
  a = R
  while True:
    h = a*h1 + h2
    k = a *k1 + k2
    if k > bound:
      maxn = (bound-k2) / k1
      minn = (a+1)/2
      if minn==maxn and a%2==0:
       th,tk = minn*h1+h2,minn*k1+k2
       return closest_sqrt_approx((h1,k1),(th,tk),n)
      elif minn > maxn:
       return (h1,k1)
      else:
       return (maxn*h1+h2,maxn*k1+k2)
       
      break      
    h2 = h1
    k2 = k1    
    k1 = k
    h1 = h	  
    P = a*Q - P
    Q = (n - P*P) / Q
    a = (R+P)/Q
Example #4
0
def sqrt_approx(n,bound=10**12):
  t = isqrt(n)
  if t*t == n:
    return (t,1)
  L = (t,1)
  H = (1,0)
  while True:
    num,denom = L[0]+H[0],L[1]+H[1]
    g = gcd(num,denom) 
    if denom/g > bound:
     return closest_sqrt_approx(L,H,n)
      
    M = (num/g,denom/g)
    if M[0]*M[0] < n*M[1]*M[1]:
      L = M
    else:
      H = M
Example #5
0
def dumb(n):
 seq = [1,1]
 c1 = 2
 c2 = 1 #counter for 2-level sequence
 l=2
 while True:
  if l == n:
   print seq
   return sum(seq)
  next = seq[c2]
  nsteps = isqrt(next)
  for ind in xrange(nsteps):
   seq.append(c1+ind)
   if l+ind+1==n:
    print seq
    return sum(seq)
  c1 += nsteps
  seq.append(next)
  l = l+nsteps+1
  c2+=1
Example #6
0
import proj_euler as pe
import numpy as np
import math
cap = 10**5
sig2 = np.zeros(cap).astype(np.int64)

s = 0
for i in xrange(1,cap):
#  j = i
  sq = i*i
#  while j < cap:
 #   sig2[j] += sq
  #  j += i
  sig2[i::i] = sig2[i::i] + sq
  s2 = sig2[i]
  t = pe.isqrt(s2)
  
  if t*t == s2:
    s += i

print s
Example #7
0
def is_sq(L):
  t = isqrt(L)
  if t*t == L:
    return True
  else:
    return False
Example #8
0
  t = isqrt(L)
  if t*t == L:
    return True
  else:
    return False

s = 0
n = 1
m = 13
b = 16
sols = [1]
while True:
  t1 = (b*b*5)/4 + 1 + 2*b
  t2 = t1 - 4*b
  if is_sq(t1):
    L = isqrt(t1)
    s += L
    print L,b
    sols.append(b)
    n+=1
    if n%2==0:
      b = (b*sols[-1])/sols[-2]
    else:
      b = (b*sols[-2])/sols[-3]
    continue
  if n==m:
    print str(s) + " foo"
    break
  if is_sq(t2):
    L = isqrt(t1)
    s += L
Example #9
0
#we want 6*k+2 <= n
first_power_primes = np.load("e565primes.npy")
for p in first_power_primes:
    if not p%2017 == 2016: print p
plist = [(p,p) for p in first_power_primes]
"""
for k in xrange(1, (n/d)/6):
    p = d*k*6-1
    if pe.MillerRabin(p): first_power_primes.append(p)
    p += 2*d
    if pe.MillerRabin(p): first_power_primes.append(p)
print len(first_power_primes)
np.save("e565primes",np.array(first_power_primes))
"""
print len(first_power_primes)
sq = pe.isqrt(n)
primes = pe.primes_and_mask(sq)[0]
#print plist[0]
max_power = int(np.log(n)/np.log(2))
powers = {}
for power in xrange(2, max_power):
    powers[power] = []
    for p in primes:
        exp = p**power
        if exp > n:
            break
#        if p%2017 == 2016 and po: continue
        if ((exp*p-1)/(p-1)) % 2017 == 0:
            plist.append((exp, p))
#            print plist[-1]
Example #10
0
def fpi(n):
 if n <= len(primes):
  return pi(n)
 a = pi(isqrt(n))
 return phi(n,a) + a - 1